Varnishを3日間いじって感じたこと・学んだこと
2014.10.22
そろそろキャッシュの一つくらい導入した方が良いだろうということで、以前勉強会でお話させていただいた方にご紹介を受けた Varnish をいじってみることにした。3日間いじってみて、色々と感じる事があったので 今後Varnishを触られる方の為にも情報を残しておこうと思う。
Varnishとは?
「HTTPアクセラレータ」と言われている。Squidの数倍速いと言われている。
簡単に言えばHTTPサーバの前にリバースプロキシサーバとして待ち受けてくれて、メモリ上にキャッシュがあればキャッシュを基にレスポンスを返すし、無ければバックエンドのHTTPサーバから取ってくる。
Varnish関連で学んだこと(実際にVarnishをいじられている方向け)
デフォルトだとポート番号は6081だけど、基本的に80番で待ち受けるように書き換えているケースが多い
…ので、httpdのポート番号を変更したり iptablesに許可ポートを追加したりする作業が発生する。
色々と柔軟に設定できるっぽい
「このディレクトリにリクエストが来た場合キャッシュしない」「この拡張子のものはキャッシュする」「このHTTPメソッドでリクエストが来た場合キャッシュをクリアする」「HTTPサーバのヘルスチェックをして、死んでいたらこのレスポンスを返す」等々、色々詳細な設定ができる模様。この辺りの設定に関してはVCLという独自のDSLを採用していて、Squidと比較しても直感的に理解しやすい。
ISUCONでの実績はあるみたい
「isucon varnish」で検索すると ちらほら記事が。その他 サーバパフォーマンス系のコンテストで何かと引き合いに出されている模様。
Cookieを含むリクエストはデフォルトではキャッシュ対象から除外
Apache Benchで同時接続数がグンと上がったぞ!とぬか喜びしていて 実は単純にabでCookieを指定していなかったことでキャッシュがヒットしていただけ なんてこともあるので注意。
特にGoogle Analyticsを導入しているとデフォでgaのCookieが入る。WordPressを使用している場合も注意が必要で、勝手に wp-settings 等のCookieが紛れ込む。つまり、デフォ設定だとこれらのせいでキャッシュにヒットしない事が多々ある。解決方法は色々あるみたいだけど、地味にハマるので注意。
Cookie関連の問題に関して「丸ごと消滅させる」という手段をとっている記事が多い
「WordpressのCookieが邪魔だからCookieを丸ごと消滅させる」
「Google AnalyticsのCookieが邪魔だから gaクッキーを消滅させてレスポンスを返す」
という手段をとっているサイトが多い。
ただ、これは実運用であまり良いプラクティスとは言えない気がする……。このあたりVarnishを使った良いやり方をご存知の方がいらっしゃいましたらご教授いただきたいです。
サイトのパーツごとにテンプレートとしてキャッシュを分ける事も可能らしい
これなら上記のCookie問題も解消するけれど、何だかもうMemcacheで良い気がしてきた。とはいえHTTPサーバにリクエストが集中するのを防ぎたいのであればこちらを使う感じになるのだろうか。
「入れれば即目に見えて効果が出る」魔法のツールではない
最近は複雑なツールのラッパとして「導入するだけで簡単に●●できる」という類いのツールが増えてきているけれど、Varnishは残念ながらそういう類いのものではなさそう。自由度が高くて柔軟な設定ができるのだけど、そうした柔軟な設定を含め、前述のような面倒な問題を解決しようとなった際のVarnishの学習コストは割と高めに感じた。
まとめ
・VCLというDSLを採用しており、自由度はかなり高そう。ただし学習コストが高い。
・導入すれば簡単にパフォーマンスが上がるわけではない。
・個人的にはどちらかというとネガティブな印象。Varnish導入してあれこれする手間を考えると、Varnishの前に出来る事がある気はする。
・扱いこなせれば結構良い感じなのかな?少なくとも今の僕にはちょっと早かった感じなので、Varnishでイケイケな運用されている方がいらっしゃいましたら是非詳しくお話を伺いたい次第です。
Varnishをいじる上で参考にさせていただいたサイト
Varnish Cache入門
非常によくまとまっている貴重な日本語のVarnishの資料。