I just uploaded the 3rd pre-release of lighttpd 1.4.12:
"www.lighttpd.net/download/lighttpd-1.4.12-20060724-0947.tar.gz"://www.lighttpd.net/download/lighttpd-1.4.12-20060724-0947.tar.gz
This pre-release should work on most platforms and it mainly got improvements for our "mongrel":http://mongrel.rubyforge.org/index.html users. A small test has shown that we can even improve the performance of mongrel by balancing over 2 local instances (on a single-cpu machine).
I'm using it here against 2 mongrels:
$SERVER["socket"] == ":1446" {
proxy-core.balancer = "round-robin"
proxy-core.protocol = "http"
proxy-core.backends = ( "127.0.0.1:3000", "127.0.0.1:3001" )
}
My small rails app got started with mongrel:
$ RAILS_ENV="production" mongrel_rails start --port 3000
$ RAILS_ENV="production" mongrel_rails start --port 3001
The performance with of the RR-LB was tested with ab, run 3 times:
$ ab -c 20 -n 500 http://127.0.0.1:1446/expenses/
Requests per second: 22.67 [#/sec] (mean)
Requests per second: 22.68 [#/sec] (mean)
Requests per second: 22.97 [#/sec] (mean)
In top the cpu-time was split nicely:
PID VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31104 26748 23m 2468 S 42.6 3.4 0:30.09 mongrel_rails
31168 27216 23m 2472 R 40.3 3.4 0:30.10 mongrel_rails
28509 9728 4900 2600 S 5.6 0.7 0:03.91 lighttpd
Against a single mongrel, without lighty, to measure the native performance:
$ ab -c 20 -n 500 http://127.0.0.1:3000/expenses/
Requests per second: 20.51 [#/sec] (mean)
Requests per second: 20.42 [#/sec] (mean)
Requests per second: 20.65 [#/sec] (mean)
Conclusion: 2 mongrels are faster than one (even on a single CPU machine).
To get more background on mod_proxy_core check out:
* "load-balancers"://blog.lighttpd.net/articles/2006/07/19/hash-balancing-with-mod_proxy_core (hash, fair, rr)
* "scheduling in the plugin instead of the kernel"://blog.lighttpd.net/articles/2006/07/15/the-new-mod_proxy_core
* fail-over handling
* "x-sendfile"://blog.lighttpd.net/articles/2006/07/22/mod_proxy_core-got-x-sendfile-support
and
"x-rewrite-*"://blog.lighttpd.net/articles/2006/07/22/x-sendfiles-new-friend-x-rewrite
* keep-alive for HTTP
* HTTP/1.1
* "header-rewriting"://blog.lighttpd.net/articles/2006/07/18/reverse-proxying-mod_proxy_core