HTTP load balancing algorithm

Ezra Zygmuntowicz ezmobius at gmail.com
Tue Jan 23 00:01:36 MSK 2007


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.
>
>
> // Jonathan Vanasco


	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.


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

Thanks
-- Ezra Zygmuntowicz 
-- Lead Rails Evangelist
-- ez at engineyard.com
-- Engine Yard, Serious Rails Hosting
-- (866) 518-YARD (9273)







More information about the nginx mailing list