RE: [Rails] ultramonkey vs pound?

Raymond,

Also check out HAProxy at http://haproxy.1wt.eu/

I've been using it on 2 installations without any problems. Pound was used before, but it was much more of a resource (cpu) hog, even when it really didn't have to do any lb'ing.

One of these installations is a very minimal VPS based setup. A simple fetch of the login page with ab (tested with 20 and 100 concurrent connections) gave me about 13 req/sec with Pound, and about 19 with HAProxy. Probably for a large part because Pound was sending requests to the mongrels in a random way, while with HAProxy I opted for a 'round robin' lb'ing. The latter gives better results when doing one-after-the-other benchmarking using tools look ab. Still, I believe a round robin style lb'ing is better suited to our situation, also under normal conditions.

HAProxy also has the interesting option of limiting connections to the back-end servers. Since mongrel can only handle 1 request at a time, I figured if you limit connections in HAProxy to 1, then new requests will get forwarded to the first non-busy mongrel at lb level instead of queued up at mongrel itself. Requests will get queued up at HAProxy and routed to the first free mongrel, instead of routed right away to the 'next' mongrel and queued at mongrel level, with the possibility that another mongrel is sitting there idle. Checking this visually with top confirmed my assumption (HAProxy: all mongrels busy, Pound: about 75% busy at full load) Benchmarking this setup with ab dropped reqs/sec back to 13, but the time/req dropped compared to Pound, and I *think* this will also result in a more responsive webapp and the best configuration for our (rails/mongrel) situation.

Also, big disadvantage about pound (at least when put behind apache, not sure about other situations): when checking production.log all requests seem to be coming from 127.0.0.1 (technically they are), while when using HAProxy you get the actual ip address they're coming from. I *believe* rails checks the 'X-Forwarded-For' http header and I don't know the details but HAProxy handles this better than Pound for our situation. (Pound probably puts it's own ip address in there when it forwards a request while Pound leaves it as it is)

On the other hand, you can't say something as cool as "I'm pounding my mongrels" when using HAProxy...

My 2 cent. Correct me if I'm wrong.

Piet.