Varnishでキャッシュしてみた
前回は、Nginxでキャッシュを行いましたが、今回はVarnishでキャッシュサーバを構築してみました
インストール
- CentOSではyumでインストール出来ますが、ソースからインストールします
yum -y install pcre-devel yum -y install expect wget http://downloads.sourceforge.net/project/varnish/varnish/2.1.2/varnish-2.1.2.tar.gz cp varnish-2.1.2.tar.gz /usr/src/redhat/SOURCES/ tar xzvf varnish-2.1.2.tar.gz cd varnish-2.1.2/redhat rpmbuild -bb varnish.spec rpm -ivh /usr/src/redhat/RPMS/i386/varnish-libs-2.1.2-1.i386.rpm rpm -ivh /usr/src/redhat/RPMS/i386/varnish-2.1.2-1.i386.rpm mkdir /tmp/varnish chown varnish.varnish /tmp/varnish
設定
- バックエンドサーバの情報やキャッシュにヒットしなかった場合の処理を記述
- 各セクションやパラメータの詳細は404 Not Foundを参照してください
vim /etc/varnish/default.vcl
backend default { .host = "127.0.0.1"; .port = "80"; } sub vcl_recv { if (req.request != "GET" && req.request != "HEAD") { return(pipe); } if (req.http.Cache-Control ~ "no-cache") { return(pass); } return(lookup); } sub vcl_fetch { if (!beresp.cacheable) { return(pass); } if (beresp.http.Set-Cookie) { return(pass); } if(beresp.http.cache-control ~ "no-cache" || beresp.http.Pragma ~ "no-cache") { return(pass); } set beresp.http.cache-control = "max-age = 3600"; set beresp.ttl = 3600s; set beresp.grace = 30s; }
- 起動パラメータを記述
- 詳細は404 Not Foundを参照してください
vim /etc/sysconfig/varnish
DAEMON_OPTS="-a :80 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -u varnish -g varnish \ -p thread_pools=2 \ -p thread_pool_add_delay=2 \ -p thread_pool_min=400 \ -p thread_pool_max=4000 \ -p listen_depth=4096 \ -p ping_interval=2 \ -S /etc/varnish/secret \ -s file,/tmp/varnish/varnish_storage.bin,1G"
起動
- 設定ファイルを確認して起動
- エラーが無ければC言語で記述された情報が表示されます
varnishd -C -f /etc/varnish/default.vcl service varnish start
ベンチマークとってみた
- Aapcheだけ、Nginx、Varnishでベンチマークをとってみました
- 100クライアントがランダムに動画のセグメントを10分間要求したシナリオ
-Apache Requests per second: 96.34 [#/sec] (mean) Time per request: 103.803 [ms] (mean) -Nginx Requests per second: 96.46 [#/sec] (mean) Time per request: 103.674 [ms] (mean) -Varnish Requests per second: 85.65 [#/sec] (mean) Time per request: 116.758 [ms] (mean)
キャッシュなしとNginxがほぼ同等の性能で、Varnishでは性能が劣化しました
ログを確認するとちゃんとキャッシュにあるものに関してはキャッシュからレスポンスを返しているのですが・・・
ちなみに、キャッシュに存在するファイルだけにアクセスしてもこの結果と同じ感じでした
原因を調査したいと思います