Request Schedulers
Request Schedulers
Defining Schedulers
Enfold Proxy can filter incoming connections and use different schedulers. In order to make use of this functionality, first, you must define a scheduler in the eep.ini file:
[scheduler sched1] vh_host = localhost:8080 localhost:8081 scheduler = leastconns rules = HEADER1|regexp1 HEADER2|regexp2
The various options alter the scheduler's configuration as follows:
- vh_host
- Defines which back-ends to schedule to respond to incoming requests. For a typical Plone setup, these back-ends correspond to ZEO clients.
- scheduler
Defines your scheduling algorithm of choice. The different algorithm options are:
- leastconns
- Route each request to the back-end (from the pool of back-ends enumerated in the vh_host section) with the least number of connections.
- roundrobin
- Route the first request to the first back-end (enumerated in the vh_host section). Route the second request to the second back-end, route the third request to the third back-end, etc., then cycle back to the first back-end.
- random
- Route each request to a random back-end (enumerated in the vh_host section).
- rules
Defines a list of filtering rules. Enfold Proxy uses the specified scheduler only if all of the rules are matched. The Python code corresponding to this logic is as follows:
regexp1.match(environ[HEADER1]) and regexp2.match(environ[HEADER2]
HEADER1 and HEADER2 are keys in the environment dictionary logged to the proxy.log file at the debug log level.
Associating Schedulers with Hosts
Now that you've defined one or more schedulers (per the previous section of this document), you can define which schedulers to use for a particular host in the eep.ini file like so:
[host website] vh_host = localhost:8080 localhost:8081 ... schedulers = sched1 sched2
In this example, you must have previously defined schedulers sched1 and sched2 (per the previous section of this document).
If Enfold Proxy's log level is set to debug, it will log the request environment as well as additional scheduling information to the proxy.log file:
SCHEDULER 'sched1' DOES NOT MATCH on criteria 'REMOTE_ADDR|127.0.0.1' for '/content.html'
or:
SCHEDULER 'sched1' MATCH on criteria 'REMOTE_ADDR|127.0.0.1' for '/news.html'
Example
Here's an example configuration that uses ZEO clients localhost:8081 and localhost:8082 for requests originating from our local network 192.168.1.xx, and ZEO clients localhost:8083 for GoogleBot:
[scheduler local] vh_host = localhost:8081 localhost:8082 scheduler = leastconns rules = REMOTE_ADDR|^192.168.1. [scheduler googlebot] vh_host = localhost:8083 scheduler = leastconns rules = HTTP_USER_AGENT|Googlebot [host site] vh_host=localhost:8080 schedulers = local googlebot