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などのリバースプロキシ、キャッシュサーバに対応できるものにしたいと思います。