Even distribution of requests between renders. Some renders are processing more requests than others.
Resolution, AnswerThe dispatching of a request is decided based on the statistics the dispatcher keeps about the responsiveness of the renders. The dispatcher keeps a record of the accumulated processing time for each render and each category.
- A request arrives to the dispatcher.
- The dispatcher tries to match the request with the different glob patterns configured in the statistics section of the configuration file, deciding the request is, for instance, of category HTML.
- The dispatcher checks in the statistics of each render, how long has the render been processing requests of category HTML.
- The dispatcher forwards the request to the render with the lower accumulated processing time for category HTML
- When the response comes back, the dispatcher adds the response time to the statistics maintained for this category.
This is the simplified procedure, assuming that there's no session affinity, all renders are always available and all the requests are processed successfully. When a render is down or is not able to process a request successfully, the dispatcher adds a penalisations to the statistics of that render. The details of the actual algorithm are more complex.
Conclusion: The load balancing is not performed based on the number of requests attended by each server, but on the time it took to process them for the category they belong to.
See also the official dispatcher documentation to configure load balancing: http://dev.day.com/docs/en/cq/current/deploying/dispatcher/disp_config.html#Configuring Load Balancing