まめ畑

ゆるゆると書いていきます

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では性能が劣化しました
ログを確認するとちゃんとキャッシュにあるものに関してはキャッシュからレスポンスを返しているのですが・・・
ちなみに、キャッシュに存在するファイルだけにアクセスしてもこの結果と同じ感じでした


原因を調査したいと思います