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