Varnish HTTP Accelerator

A few days ago, I was searching for a reverse proxy that is capable of caching dynamic content for a specified period of time. Apache2 + mod_proxy / disk_cache seemed to be the perfect solution, but in fact it did not work properly in the scenario I set up (LAMP / Typo3). After googling around, I did *not* try squid, as I found the Varnish HTTP accelerator.To sum it up: that thing works.

I experimented a bit for a pretty large Typo3 site that we are hosting. Not that the site is slow (we run it on a neat “Sun Fire”) – I just wondered if it is really necessary to pass every request to Typo. The content on the site is changed frequently, but a caching time of 3 minutes or so would not hurt anyone…

Enough talking, let’s see the facts. I measured with apachebench on one of our development machines:

———
Without varnish – direct requests to Typo3. Typo3 caching enabled.

[root@uradium:~]# ab -g result.txt -n 500 -c 3 http://xxxxxxxxxxxxxxxxx.de
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking xxxxxxxxxxxx.de (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Finished 500 requests

Server Software: Apache
Server Hostname: xxxxxxxxxxxx.de
Server Port: 80

Document Path: /some/path/
Document Length: 35584 bytes

Concurrency Level: 3
Time taken for tests: 77.802856 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Total transferred: 17898500 bytes
HTML transferred: 17792000 bytes
Requests per second: 6.43 [#/sec] (mean)
Time per request: 466.817 [ms] (mean)
Time per request: 155.606 [ms] (mean, across all concurrent requests)
Transfer rate: 224.66 [Kbytes/sec] received

———————————
Same machine, same website, same connection, different approach:
Apache on ext:80 with mod_proxy => Varnish on localhost => Apache on localhost:8080

[root@uradium:~]# ab -g result.txt -n 500 -c 3 http://varnish.xxxxxxxxxxxxxx.de/
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking varnish.xxxxxxx.de (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Finished 500 requests

Server Software: Apache
Server Hostname: xxxxxx.de
Server Port: 80

Document Path: /some/path/
Document Length: 32700 bytes

Concurrency Level: 3
Time taken for tests: 1.672068 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Total transferred: 16529554 bytes
HTML transferred: 16378753 bytes
Requests per second: 299.03 [#/sec] (mean)
Time per request: 10.032 [ms] (mean)
Time per request: 3.344 [ms] (mean, across all concurrent requests)
Transfer rate: 9653.91 [Kbytes/sec] received

—————————

Even this rough-and-ready setup gave me 46 times more requests per second, and even the uncacheable sections of the site do in fact work, because Typo does a good job when it comes to cache headers.

Does not seem to be too hard to adopt this to CF projects!

Post to Twitter Post to Delicious Post to Facebook Post to StumbleUpon

Related posts

This entry was written by marcus, posted on Friday February 22 2008 at 12:02 am, filed under Agent M and the rest of the world and tagged , , , . Bookmark the permalink . Post a comment below or leave a trackback: Trackback URL.

Leave a Reply