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 リクエスト
nginx0.1秒9989.01 リクエスト

a-blog cmsのキャッシュを効かせただけでも、十分速度があがりますが、Nginxのキャッシュを使用すると圧倒的ですね。1000リクエストをわずか0.1秒で処理し、1秒あたり1万リクエスト近くを処理しています。

課題

Nginxの強力さが分かり是非a-blog cmsのキャッシュサーバとして活用したいのですが、キャッシュのクリアとUserAgentによるルールが課題になってきます。

UserAgentによるルールへの対応ですが、Nginx側でuaを考慮したキャッシュ生成ができるので解決できそうです。

キャッシュクリアの問題ですが、いろいろな方法が考えられますが、a-blog cms側ではキャッシュをクリアする時のフックポイントを作ってそこに処理を書いてもらう感じになるのではないかと考えています。キャッシュクリアの方法は、実装者にまかせる形です。

次のバージョンでは、Nginxなどのリバースプロキシ、キャッシュサーバに対応できるものにしたいと思います。

同じタグ付けがされている記事