ApacheとSquidのキャッシュ性能差

6月29日のエントリですこし触れましたが、6月の末にウェブの構成を少々変更しました。いままではApache+Zopeの二段階構成で、Apacheのmod_disk_cacheをつかってキャッシュを効かせていました。

    +--------+  +-----+
    | Apache |--| Zope |
    +--------+  +-----+

これを変更して、ApacheZopeの間にSquidを入れてみました。直接外部からのHTTPリクエストをSquidでうけてもいいのですが、いままでの運用でいろいろとリバースプロクシとしての設定をApacheへいれているので、そこの設定はそのままにして、キャッシュ部分だけをSquidで代替。

    +--------+   +------+  +------+
    | Apache |---| Squid |--| Zope |
    +--------+   +------+  +------+

実際の構成はApache,Squidが二台のサーバでそれぞれ動作していて、ApacheからSquidへはmod_proxyのMemberで、またSquidからZopeへは間にApacheをいれてこれもまたmod_proxyで冗長化しています。一番後ろのZopeバックエンドインスタンスは10個。
上記の二つの構成でabでベンチマークをとった結果がこちら。ab -n 50 -c 50 http://www.expamble.com/index.htmlの結果です。いずれもちゃんとキャッシュがたまってから参照するように、3〜4回実行して最後のものをデータとして採用しています。

まず構成変更前。つまりApacheのキャッシュで運用しているとき。

Document Path:          /index.html 
Document Length:        16599 bytes 

Concurrency Level:      50 
Time taken for tests:   5.064 seconds 
Complete requests:      50 
Failed requests:        0 
Write errors:           0 
Total transferred:      843300 bytes 
HTML transferred:       829950 bytes 
Requests per second:    9.87 [#/sec] (mean) 
っとTime per request:       5063.702 [ms] (mean) 
Time per request:       101.274 [ms] (mean, across all concurrent requests) 
Transfer rate:          162.63 [Kbytes/sec] received 

Connection Times (ms) 
              min  mean[+/-sd] median   max 
Connect:        5   13   2.8     14      14 
Processing:  1424 4124 1080.1   4817    5049 
Waiting:     1411 4110 1078.9   4804    5036 
Total:       1428 4137 1081.3   4831    5063 

次に構成変更後。つまりSquidのキャッシュで運用したとき。

Document Path:          /index.html 
Document Length:        16599 bytes 

Concurrency Level:      50 
Time taken for tests:   0.613 seconds 
Complete requests:      50 
Failed requests:        0 
Write errors:           0 
Total transferred:      847550 bytes 
HTML transferred:       829950 bytes 
Requests per second:    81.56 [#/sec] (mean) 
Time per request:       613.024 [ms] (mean) 
Time per request:       12.260 [ms] (mean, across all concurrent requests) 
Transfer rate:          1350.17 [Kbytes/sec] received 

Connection Times (ms) 
              min  mean[+/-sd] median   max 
Connect:      482  484   3.8    484     499 
Processing:    68   95  15.8     92     126 
Waiting:       26   48  26.6     32      95 
Total:        551  580  17.8    576     612 

まず、体感的に全然ちがう。構成変更後の方がめちゃくちゃ早い。だって、ベンチマークにかかった時間が5秒と0.6秒ですから。
Time per requestの時間をみても、10倍以上の性能差。少々出来すぎなかんじがしますが。やっぱりキャッシュに関してはSquidの方が一日の長があるってところでしょうか。

ともあれ、ウェブがとっても早くなってとってもうれしい。