a-blog cmsでnginx(キャッシュサーバ)を使ってみる
nginxとは
wikipedia参照 > "nginx(発音は「Engine-X」)は、オープンソースのWebサーバであり、HTTP, SMTP, POP3, IMAPのリバースプロキシとしても機能する。高い並行性と処理性能、メモリ使用量の小ささに重点を置いて開発されている。BSD-likeライセンスでリリースされている。"
つまりApacheと同じwebサーバの事ですが、ここで重要なのはリバースプロキシとして高速に動作するという点です。
今回やってみたことは、表側にnginxをキャッシュサーバとして置き、裏側のApacheにa-blog cmsをインストールするという構成になります。(下の図参照)
このように、Nginxでキャッシュがあった場合はそのままレスポンスを返し、キャッシュがなかった場合は、Apacheに問い合わせる形になります。
速度比較
以下の3パターンで速度を比較してみました。(ローカルで動作) ベンチマークに使ったソフトはApacheのabコマンドになります。
- a-blog cmsキャッシュなし
- a-blog cmsキャッシュあり
- a-blog cmsキャッシュあり、Nginxキャッシュあり
site2013テーマ 同時接続数10、総リクエスト数1000で実施
■ 速度測定(MAMP)
同時接続数10・リクエスト数1000
① a-blog cmsキャッシュなし
Server Software: Apache/2.2.22
Document Lengthg: 17698 bytes
Time taken for tests: 150.441 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transfereed: 17916000 bytes
HTML transferred: 17698000 bytes
Request per second: 6.65 [#/sec]
Time per request: 1504.412 [ms]
Time per request: 150.441 [ms]
Transfer rate: 116.30 [kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 5
Processing: 761 1502 100.1 1488 1884
Waiting 758 1477 100.7 1467 1864
Total: 761 1502 100.1 1488 1884
② a-blog cmsキャッシュあり
Server Software: Apache/2.2.22
Document Lengthg: 13993 bytes
Time taken for tests: 12.822 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transfereed: 14301000 bytes
HTML transferred: 13993000 bytes
Request per second: 77.99 [#/sec]
Time per request: 128.216 [ms]
Time per request: 12.822 [ms]
Transfer rate: 1089.24 [kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 5
Processing: 49 128 41.3 121 298
Waiting 47 124 41.2 118 286
Total: 49 128 41.3 121 298
③ nginxプロキシキャッシュを使用
Server Software: nginx/1.2.4
Document Lengthg: 3152 bytes
Time taken for tests: 0.100 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transfereed: 3473000 bytes
HTML transferred: 3152000 bytes
Request per second: 9989.01 [#/sec]
Time per request: 1.001 [ms]
Time per request: 0.100 [ms]
Transfer rate: 33878.75 [kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 0 1 0.3 1 3
Waiting 0 1 0.3 1 2
Total: 1 1 0.3 1 3
この結果の要点が以下のような感じになります。
キャッシュ | 総リクエスト処理時間 | 1秒あたりのリクエスト処理数 |
---|---|---|
キャッシュなし | 150.441秒 | 5.54 リクエスト |
cmsキャッシュ | 12.822秒 | 77.99 リクエスト |
nginx | 0.1秒 | 9989.01 リクエスト |
a-blog cmsのキャッシュを効かせただけでも、十分速度があがりますが、Nginxのキャッシュを使用すると圧倒的ですね。1000リクエストをわずか0.1秒で処理し、1秒あたり1万リクエスト近くを処理しています。
課題
Nginxの強力さが分かり是非a-blog cmsのキャッシュサーバとして活用したいのですが、キャッシュのクリアとUserAgentによるルールが課題になってきます。
UserAgentによるルールへの対応ですが、Nginx側でuaを考慮したキャッシュ生成ができるので解決できそうです。
キャッシュクリアの問題ですが、いろいろな方法が考えられますが、a-blog cms側ではキャッシュをクリアする時のフックポイントを作ってそこに処理を書いてもらう感じになるのではないかと考えています。キャッシュクリアの方法は、実装者にまかせる形です。
次のバージョンでは、Nginxなどのリバースプロキシ、キャッシュサーバに対応できるものにしたいと思います。