みなさん、こんにちは。
2010年9月入社のUDAGAWAです。
今回は、reverse proxyのvarnishに関して記事を
書かせていただきます。
■varnishとは
高性能HTTPアクセラレータです。
同じような機能を持ったsquidより10~20倍高速だということが
売りのひとつだそうです。
■背景
Amebaの画像配信システムは、reverse proxyとして
squid2.7 STABLEのCOSSを使ったシステムを利用しています。
squid2.7自体が古いバージョンなので、できればバージョンアップしたいところ
なのですが、現状 squid3系からはcossが使用できないこともあり
varnishを検証しておこうと考えたのがきっかけです。
■テスト環境
CentOS5.5
Kernel 2.6.18-194.3.1.el5
Varnish 2.1.3
■インストール
■設定
設定ファイルの書き方については多々あり、他の記事でも
紹介されているので、そちらを参考いただければと思います。
ほとんど、squidと同じことができます。
主な部分としては・・・
・backendのサーバへの分散
Directorを使うことによって、backendのサーバにround-robin、DNS、random
での振り分けができます。
・backendサーバのhealth check
healthcheckについても簡単に設定できますが、.probeの記述がないと
backendのサーバの切り離しができないので注意が必要です。
・サブルーチンを使いこなす
backendのサーバへの分散ルール&アクションの定義です。
複数のアクションがありますが、たとえばドメインごとに
分散ルールを設定することもできます。
リクエストされたURLが、hogehoge.jpなら、backendサーバ hogehoge01に渡す場合
■設定(その他)
・sycctl.conf
公式ドキュメントで紹介していますが、sysctl.confの
設定を変えることを推奨しています。
■起動時のオプション
■ベンチマーク
abbenchを使って、ある画像に10000回のリクエストを発行しました。
結果からいってしまうと、squidより早いですね。
■結果
10倍とまではいきませんが、squidより早いというのは本当みたいです・・・
若干ログの出力部分等で、squidに劣る部分がありますが
なんとなく使えそうな感じがします。
4月末に新しい画像システムを構築するので、その際のreverse proxyに
使用してみようかと考えています。そこで得たtipsなどは
また後ほど紹介させていただきたいと思います。
ちなみにcache領域(storage)の再構築にかかる時間が未検証なことと
squidのようにcacheオブジェクトのサイズで格納先を変えることが
できないようなので、引き続き調査します。
■おまけ。
squidでreverse proxyを運用するにあたって、いくつか得たTipsも簡単に紹介します。
・COSSでのcache領域は、SSDがよい。
COSSで使用するcache領域は、SSDを使用することで大幅にパフォーマンスがUPします。
Amebaでは、CrucialSSD 256GBを使用しています。
・swapに気をつけましょう。
cacheするオブジェクトが多ければ多いほど、squidで明示的に確保しているメモリ以外に
オブジェクトを展開するためにメモリを使用します。
そのため、たびたびswapが発生することもあります。
メモリを増設するのもいいですが、swapの開始閾値を変更するのもありです。
・refresh-patternを有効に使う
refresh-patternの設定を有効に使うことによって、Pragma:no-cache、Cache-control:no-cacheなどの
リクエストを無効化することができます。