BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JaegerとUberのCRISPを使ったマイクロサービスコールのクリティカルパス分析

JaegerとUberのCRISPを使ったマイクロサービスコールのクリティカルパス分析

原文(投稿日:2021/12/20)へのリンク

マイクロサービスベースのシステムでエンドツーエンドの遅延を減らすために最適化する必要のあるサービスを見つけることは課題である。コールグラフが複雑すぎて読み取れない場合があるためだ。Uberはこの問題を解決するために開発されたCRISPと呼ばれるオープンソースツールについて説明した。このツールでは、コールグラフでクリティカルパスを見つける。クリティカルパスによって、最適化することでシステム全体に利益がある操作を特定できる。

相互作用する特殊で独立したデプロイメントユニットを使うことは、マイクロサービスアーキテクチャの基本的な特徴である。したがって、マイクロサービスアーキテクチャで1つの要求を満たすことは、通常、異なるマイクロサービス間の複数の相互作用に関係する。リクエストのエンドツーエンドの遅延は、すべてのインタラクション遅延の組み合わせの結果となる。

どの相互作用が最も重要な影響を与えるかを理解することは、最適化、システム構成、容量計画、問題診断の優先順位付けに役立つ。しかし、マイクロサービスベースのシステムのサイズと複雑さが大きくなるにつれて、各相互作用の影響について推測することがより困難になる。

研究者のMillind Chabbi氏、Chris Zhang氏とエンジニアのMurali Ramanathan氏は、マイクロサービス間の相互作用がコールグラフ、特に有向非巡回グラフ(DAG)を形成すると述べている。並列タスクで構成される計算グラフの研究に関する豊富な研究コーパスがすでに存在している。マイクロサービスアーキテクチャは分散システムと見ることができるため、その調査はマイクロサービス間の呼び出しを表すDAGの分析にも適用できる。

並列計算タスクのフローを表すDAG。処理量に比例したノードの重みを持つ。出典: https://eng.uber.com/crisp-critical-path-analysis-for-microservice-architectures/

DAGのクリティカルパスは、特定のコールグラフで遅延を減らす方法を理解するための鍵である。記事の著者は、クリティカルパスを次のように定義した。

正式には、並列計算DAGのクリティカルパスは、DAGを通る最も重みが大きい(各ノードに関連付けられた重みがある)パスです。(...)並列プログラムDAGのクリティカルパスは、プログラムの高速化のコンポーネントを表します。これにより、並列プログラムの全体的な実行時間が高速化されます。

UberはJaegerを広範囲に使って、マイクロサービス間のトランザクションを追跡する。Jaegerは「スパン」に基づいてトレース情報を生成する。「スパン」は1つのサービスリクエストに関連する呼び出しの完全なチェーンを理解するために使用される。Jaegerのスパンは、親子関係を持つことができる処理単位である。子スパンは、開始時刻と期間を含む、ダウンストリームサービスへの呼び出しを表す。

Jaegerは、コールグラフとタイムラインを視覚化するためのユーザインターフェイスを提供する。しかし、Uberのような複雑な環境では視覚的に理解するのは困難だ。

CRISPは、Jaegerトレースを減らし、必須なもの、つまりクリティカルパスにすることでこの問題を解決する。この削減は、それらを計算DAGに変換した後、分析して各DAGのクリティカルパスを計算することで実現される。

個々のトレースからクリティカルパスを計算するために、トレースの最後から最初まで逆の順序でトレースを再生し、同期イベントを探す。

同期イベントは、操作を継続する前の、ある操作が別の操作の完了を待つ瞬間である。したがって、スパンの終了は同期イベントである。

DAGとして表されるJaegerトレース。出典: https://eng.uber.com/crisp-critical-path-analysis-for-microservice-architectures/

上の図の赤いスパンは、DAGのクリティカルパスである。他のスパンはクリティカルパスの一部とは見なされない。実行時間の短縮が合計実行時間に影響を与えないためである。

マイクロサービスは独立したデプロイメントユニットのため、多くの場合、異なるハードウェアで実行される。クリティカルパス分析は、正確で比較可能なタイムスタンプに依存するが、クロックスキューのために達成するのが難しい場合がある。CRISPのアルゴリズムは、スパンタイムスタンプでのクロックスキューの影響を最小限に抑えるためにいくつかの戦略を採用している。

複数のクリティカルパスを集約して、システム全体の全体像を把握できる。その際、CRISPは、操作全体のプールへの各クリティカルパスの操作時間の寄与度をビューで提供する。寄与度は、パーセンタイル50、95、99でサマライズされたものとなる。

CRISPの結果は、フレームグラフ、ヒートマップ、テキストの要約など、さまざまな表現で表示される。

たとえば、マルチスレッドやマルチプロセスのプログラムパフォーマンスを測定・分析することを目的としたHPCToolkitプロジェクトの下で、同じような取り組みが行われている。CRISPは分散システム上のプログラム間の相互作用に関心があるが、HPCTookitの焦点はプログラムそのものである。

作者について

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT