12月 172013
 

6ヶ月ぐらい前の話になるんですがVarnish User Group7(VUG7)で発表してきました。
下書きは書いたものの発表後の燃え尽きと、時期逃したかなと放置していたのですが、先日VUG8もあったのでせっかくなので書きました。

資料はこれです。

話した内容は古い配信システムをマイグレーションした話とその過程で作った、使ったツールの紹介です。
会社のシステムなので細かいことは書けないのですが、所属している会社を考えて頂ければそれなりの規模だと想像していただけると思います。更にいうと単一ではなく複数のシステムの統合です。
また、スライドにも書いてあるとおりなのですが、マイグレーションはダウンタイムなしで最初の1台を入社後の一月以内で投入というスピード感で行われました。

どのようなマイグレーションでもそうだと思うのですが、今回私が特に気をつけて行ったのが以下です。
・キャパシティプランニング
・分割リリース
・十分なテスト
・投入後の念入りな計測とフィードバック
・ドキュメント整理

スライドには使わなかったのですがざっくりこんなサイクルを回していました。
vug7
なぜこんなにTDDっぽいことをやっていたかというと、今回のシステムがそれなりに大きかったため分割リリースという手段を取ったことと、VCL自体を共通部分とホスト固有の設定を分割したからです。
このようなサイクルを回したことでデグレードもテストで抜けましたし、バグが混入しているんじゃ・・・という心理的な不安も軽減され、一日に何度も設定をDeployも不安なくできました。
また、投入後もドメインや場合によってはディレクトリ別のトラフィックやRPSやhitrateなどをみたり非常に細かく計測行いチューニングを行いました。
では、これらを標準で提供されていたコマンド群(varnishtest/varnishlog…)で全部足りたかというとそうではなく、いくつかは自分で開発したコマンドを使いました。
VUG7では開発したテストと計測についてのツール3つを発表してきました。

・Varnishのログをわかりやすく表示するvsltrans
・varnishtestのログをわかりやすく表示するvtctrans
・VSLにサクッとアクセスするためのライブラリpython-varnishapi

なんでこんなツールを作ったかというと

・Varnishが吐き出す各種ログは詳細過ぎて人間が読むには時間がかかる
・標準コマンドだと細かい測定を行う際に微妙に手が届かない

例えばApacheのmod_rewriteのLv9のログ出力を即把握出来る人は少ないんじゃないかと思います。
同様にvarnishlogも詳細すぎて正直すぐ把握しづらいものです。
事実VarnishのIRCをたまに眺めていると、このようなやり取りを見ることが有ります。

「キャッシュヒットしないんだけど助けて」
「VCLとvarnishlogのログをだせ」
「出したよ!」
「ああVaryの問題だね」
「!!!」

他ミドルウェアでもよくあるやりとりにも見えますが、ここに重大な問題があると考えています。
varnishlogの出力する詳細なログには原因が出力されているのですが理解出来ない、これは非常に残念なことだと思います。
ミドルウェアを使う上でいろいろな問題点にぶち当たることは多々あることです。
そういう時に解決しやすい、仮に解決できないとしても一体何が起きているかということを把握できるのは重要だと思います。
これはvarnishtestのログにも言えることで情報がぱっと見わかりづらいです(参考:Varnishでテストコードを書こう!
ツールが一助になればなぁと考えています。

また、キャッシュを行う際に重要な指標の一つにヒット率があると思います。
しかしVarnishが標準で取れるのはそのインスタンスでのヒット率で、例えばホストごとや特定のディレクトリでのヒット率・トラフィックを調べるのはできません。
なぜそのような細かい条件でのヒット率が重要なのかというと、キャッシュするオブジェクトの生成コストは同一ではないからです。
コストが低いオブジェクト(=ファイルとか)のヒット率に隠れて、コストの高いオブジェクト(=動的に生成してる画像とか)のヒット率が低くなってしまうと、システム全体としての負荷が高まって本末転倒になってしまう可能性があります。
私はサマライズされたヒット率ではなくてシステム全体の負荷を見るべきだと考えています。
1×1の透明画像のヒット率がいくら高くてもあんまり嬉しくないのです。
そこでホスト別やディレクトリ別のような細かい計測を行うためにVarnishが共有メモリ上に吐き出している生ログ(VSL)に簡単にアクセスするためのライブラリを作りました。
そんなに大したことはしていないのですが案外便利です。

若干記事に上げるのは遅くなったのですが誰かの参考になれば嬉しいと思います。

また、今回初めて海外の勉強会に参加してしかも英語で発表してきたのですが
Varnish Software・コミュニティ・会社のネイティブな方の添削・レアジョブの講師の方々などのサポートもあり、私の中では非常にうまくいったんじゃないかなと思っています。
今後も機会があれば、日本に限らず海外の勉強会行ってみたいなーと思います。

あと関係無いですが今日誕生日だったりするので何か貰えるとうれしいです!