Twitterが公開した分散トレーシング(追跡?)システム、Zipkin(Jugemより移植)

Posted by johtani on Wednesday, June 13, 2012

目次

すでに読まれた方もいるかも知れませんが、気になったのでメモを書いてみようかと。

先週の木曜日にTwitterのエンジニアブログでZipkinというOSSを公開したという記事がでました。 非常に興味深いシステムだったので、ちょっとずつ読み解いていきたいなという宣言(というか、ハッパをかけてもらうため)も兼ねて、まずはブログの内容をメモ程度に残しておきます。


Zipkinは分散トレースシステム(distributed tracing system)です。Twitter APIの1リクエストを構成する様々なサービスのタイミングデータ(計時データ)を集めるために作りました。 Firebugのような性能プロファイラのよなもので、しかもバックエンドのサービスもプロファイル可能です。 ZipkinはAPLv2ライセンスでOSSとしてGithubで公開しています。

ZipkinはWebのユーザインタフェースを持っています。(元記事参照) 各サービス(縦軸)でどのくらい時間がかかっているか(横軸)がわかり、クリックすることでより詳細な情報が得られます。 Zipkinはパフォーマンス改善の余地のある部分(遅いMySQLのSELECTなど)を見つけるのに役立ちます。

Zipkinはどのように動くの? Twitterに届いたリクエストからサンプリングしたリクエストに対してトレース可能なIDを付与して、すべてのサービスに渡していきます。 全リクエストの一部をサンプリングすることで、トレースのオーバヘッドを減らし、常に本番環境で利用できるようにしています。 Zipkinコレクタ(collector)が、Scribe経由でタイミングデータを受け取り、Cassandraに保存してインデックスを作成します。 Zipkinクエリデーモンがインデックスを利用して、WebUIにトレースデータを見つけます。

ZipkinはHack Weekで開始されました。 最初はThriftに対するGoogle Dapperの論文の基本的な部分の実装から始まり、現在ではHttp、Thrift、Memcache、SQL、Redisリクエストをサポートしています。 これらはFinagleライブラリで経由で動作します。Rubyのgemも用意してあります。


ということで、ほぼ直訳ですが、何かの役に立てればと。 ちょっとずつですが、Githubのページやソースを読みながら記事を書いていこうと思っています。


comments powered by Disqus

See Also by Hugo


Related by prelims-cli