[Mongrel] Unix Domain Sockets + Fork for improved scalability

Eric Wong normalperson at yhbt.net
Thu May 8 03:50:25 EDT 2008


Jeremy Hinegardner <jeremy at hinegardner.org> wrote:
> On Mon, May 05, 2008 at 11:37:56PM -0400, Brian Weaver wrote:
> > Unfortunately a long running request could cause our entire web
> > application to "hang".  As these requests are being processing one or
> > more mongrel instances continued to accept and enqueue new connections
> > it can't immediately service.

Heh, this is also the exact problem I designed qrp around, too.

> Another solution: 
> 
> You could stick HAproxy in front of your mongrel cluster with a the
> configuration somewhat like:
> 
>   listen application *:80
>       balance roundrobin
>       server  mongrel0 127.0.0.1:5000 minconn 1 maxconn 1 check
>       server  mongrel1 127.0.0.1:5001 minconn 1 maxconn 1 check
>       server  mongrel2 127.0.0.1:5002 minconn 1 maxconn 1 check
>       server  mongrel3 127.0.0.1:5003 minconn 1 maxconn 1 check
>       server  mongrel4 127.0.0.1:5004 minconn 1 maxconn 1 check
> 
> The 'minconn 1 maxconn 1' will force haproxy to queue the results within
> itself instead of mongrel, and the 'check' will take the mongrel out of
> rotation if it goes down, and add it back into the rotation as soon as
> it comes back up.  As soon as one mongrel is finished with a request,
> haproxy will give it one of the ones it has queued.
> 
> This is a simple version of what I'm doing to load balance clusters of
> mongrels these days.

I initially tried doing this with haproxy before I made qrp, but it made
monitoring/testing something against an individual backend Mongrel
process far more difficult as I require Mongrel to accept connections
haproxy didn't forward; so I disabled concurrency on the Mongrel
side instead.

-- 
Eric Wong


More information about the Mongrel-users mailing list