ikemonn's blog

技術ネタをちょこちょこと

Dapper, a Large-Scale Distributed Systems Tracing Infrastructure を読んだ

Dapper, a Large-Scale Distributed Systems Tracing Infrastructureを読んだ時のメモ。

どんなもの?

  • 分散トレーシングシステム
    • 分散システムのtraceをする

f:id:ikemonn:20170730214056p:plain

先行研究とくらべて何がすごい?

  • 設計上の目標
    • オーバーヘッドが少ない
      • サービスのパフォーマンスに影響を与えないように
    • アプリケーションレベルでの透過性
    • 大規模システムにもubiqitousデプロイ出来る
  • 要件
    • ubiqitous deploy
      • システムの一部がモニタリングされていないだけで大きな影響を受ける
    • continuous monitoring
      • 不測の事態や記録しておくべき挙動は、再現できない/難しいのでずっとモニタリングしておく必要がある

技術や手法の肝は?

  • Distributed Tracing in Dapper

    • trace tree
      • node
        • span
          • unit of work
          • RPCの開始/終了のタイミングをencodeしたデータ
          • human-readableな名前がつけられている
          • span間での関係性の再構築のため、span idやparent idなどを含む
          • 特定のtraceに関連するspanには共通のtrace idが振られている
      • edge
        • spanと親spanの関係を表す

    f:id:ikemonn:20170730214204p:plainf:id:ikemonn:20170730214210p:plain

  • Instrumentation points

    • 共通ライブラリを使うことで簡単にアプリケーションに組み込める
    • Annotations
      • シンプルなAPIを用いて、タイムスタンプを含むannotationを定義できるようにした
      • key-value型もサポート

      f:id:ikemonn:20170730214252p:plain

    • Trace collection
      • ログキングと集計のパイプライン
        • 1 span dataがローカルのログファイルに書き込まれる
        • 2 Dapper daemonによって全ての本番ホストからデータが収集される
        • 3 Dapper BigTableに保存される
          • rowがtrace id, columunがspan idに対応 f:id:ikemonn:20170730214412p:plain
  • Managing Tracing Overhead

    • traceのオーバーヘッドは主にspanとアノテーションの作成/削除にある
      • Root spanは平均204 nanosec
      • Non root spanは176 nanosec
        • 違いはglobalでユニークなtrace idを割り当てる部分
    • local diskへの書き込みは最も遅いが、まとめて書き込むのと非同期に書き込むのでオーバーヘッドはそれほどない
    • Dapper daemonは1コアあたりCPU 0.3%以上は使わない、メモリのfootprintも小さい
  • General-Purpose Dapper Tools

どうやって有効と検証した?

  • Using Dapper during development
    • Google Adwordsで利用した
    • Dapperを用いることでパフォーマンスが向上した
    • performance
      • request latencyをトラックできたので、ピンポイントに最適化できた
      • 他の人が書いたサブシステムが発行している、不要なrequestの特定もできた
    • correctness
      • Ads Reviewサービスでは2種類のDBがいる
        • read-only replica(inexpensive access)
        • read-write master(expensive access)
      • Dapperのお陰でmasterにアクセスする必要のないクエリがあることがわかった
    • understanding
      • Ads Reviewのクエリは様々なシステムに対して発行される
      • totalのクエリコストをみて、それらのシステムの依存性のredesignを行えた
    • testing
      • システムが正しい挙動をしているかや、パフォーマンスを確認できるようになった

議論はある?

  • 緊急時にshared stroage serviceでは役に立たない
    • すぐにログやメトリックがみたいが、すぐに見れない
      • shared stroage serviceではアグリゲートされた情報が必要であり、すぐに見れない(約10分以内でみれる)
  • Tracing batch workloads
    • Dapperはオンラインサービスを対象に作られたが、MapReduceのようなオフラインサービスのパフォーマンス向上にも使いたい
  • Finding a root cause

    • 処理のある部分が速いか遅いかは分かるが、根本原因を特定するのに十分な情報は得られない
  • Logging kernel-level information

    • kernel-visible event に関する詳細な情報をとりたい
      • user levelにいながらkernelの情報をとるのは一般的な方法では難しいのでsnapshot等を使う

次に読むべき論文は?

Web Search for a Planet: The Google Cluster Architecture.