I'm looking into software load balancers and so far the 4 that seem to standout are:
- Nginx (http://nginx.net/)
- Pound (http://www.apsis.ch/pound/)
- HAProxy (http://haproxy.1wt.eu/)
- Perlbal (http://www.danga.com/perlbal/)
Does anybody have experience using any of these, in live production environments (under reasonably heavy usage), and if so what pros and cons do you see with them ?
[internet] <-> [Nginx] <-> [HAProxy] <-> [app servers]
Nginx is a great webserver, but isn't a good load balancer. You can install a patch that improves the balancer - http://brainspl.at/articles/2007/11/09/a-fair-proxy-balancer... - but it still isn't as nice as HAProxy
With HAProxy the status of the system is visible. For the largest site I use HAProxy on I keep my status page public - http://userscripts.org/haproxy - but it isn't required.
HAProxy is particularly good for rails since you can say each app server can only have 1 request at any time. This makes requests queue at the HAProxy layer, so if an app server has a request that takes a extra long time you don't have requests waiting for that app server to finish - instead you wait for the next available app server in a FIFO queue.
Combining HAProxy with munin gives great stats for tuning your system - whereas just nginx with the patch had no visibility into where bottlenecks might be.
I