HTTP load balancing algorithm

Igor Sysoev is at
Tue Jan 23 00:12:19 MSK 2007

On Mon, 22 Jan 2007, Ezra Zygmuntowicz wrote:

> On Jan 22, 2007, at 12:43 PM, Jonathan Vanasco wrote:
>> On Jan 22, 2007, at 3:28 PM, Igor Sysoev wrote:
>>> I do not know ROR and Mongrel, but as I understand you may try
>>> to route slow requests to the dedicated backends:
>> that's what I thought of too, and you can do that with any proxy ( though i 
>> prefer nginx )
>> i'd be deathly scared of running a loadbalancer that automagically handled 
>> slow/fast requests the way you expect.  the configuration would be a 
>> nightmare, and it would be doing so much logging and profiling of request 
>> timings, it might negate the purpose of a load balancer to begin with.
> 	The ideal way that nginx's proxy could work best for rails/mongrel 
> backends would be an optional proxy setting for not sending a request to a 
> backend until said backend returns from a request.
> 	Rails is not thread safe and so there is a mutex lock around each 
> rails request. It would be better for nginx to queue these up instead of 
> mongrel's queuing these up. Each mongrel can only serve *one* rails request 
> at a time. So if a slow action happens then nginx will continue to send 
> requests to that mongrel where they will stack up and each have to wait for 
> the one before it to finish.
> 	If nginx was able to send a request to a backend, and then not send 
> another request to that same backend until it returns the request it's 
> working on. This would make the requests queue in nginx and be sent to the 
> first backend that returns from a request.
> 	If support was added to the proxy module to only send one request to 
> each backend at a time then it would significantly increase the performance 
> of rails applications running on mongrels behind nginx. I know that Haproxy 
> has this feature but I don't know of any of the webserver/proxy balancers 
> currently used with rails that has this. This feature would give a 
> substantial edge to nginx in the rails application world.

I plan to add someting like this:

     upstream name {
         server   host:9000  max_conn=5  max_wait=100  wait_time=60s;

> 	Also Igor,  what is the algorithm that nginx uses for proxy module? 
> Is it a round robin or something else?

Yes, currently it's round-robin only.

Igor Sysoev

More information about the nginx mailing list