# リクエストフロー再構築 ## 定義 リクエストフロー再構築(request flow reconstruction)とは、分散システムにおいて個々のサービスリクエストが複数ノード・複数スレッドにまたがってどのように処理されたかを、テレメトリデータから事後的に復元する技術である。再構築の結果は通常、(1)リクエスト種別、(2)開始・終了タイムスタンプ、(3)経由ノードと各ノードでの処理時刻、(4)呼び出されたメソッドのシーケンスを含む構造化された表現として表される。[[分散トレーシング]] の一形態だが、**計装を前提とするか否か**が異なる系統を生む。(Source: [[@2014__OSDI__lprof - A Non-intrusive Request Flow Profiler for Distributed Systems]]) 再構築の目的は主に性能プロファイリング(レイテンシ分析・ボトルネック特定・スローダウンクリープ検知)および障害診断([[Fault Localization]])であり、インフラ層のメトリクスベース手法では見えないリクエスト粒度の問題を可視化する。 ## 手法の分類 ### 計装ベース (Instrumentation-based) ソースコードまたはミドルウェアを改変して固有リクエストIDを各ログ/スパンに付与し、因果連鎖を明示的にたどる。 - 代表例: Dapper(Google)、X-Trace、MagPie(OSDI 2004)、Project 5(SOSP 2003) - 長所: 高精度、フルスタック追跡 - 短所: 全コンポーネントの計装が必要、本番環境での性能オーバーヘッド ### 統計的手法 (Statistical correlation) リクエストを個別に追跡するのではなく、コンポーネント間の応答時間相関から依存関係を推定する。 - 代表例: Pinpoint(DSN 2002) - 長所: 計装不要 - 短所: 個別リクエストのフローを再構築できない; スローダウンクリープを検知できない ### 非侵入型ログ縫合 (Non-intrusive log stitching) ランタイムログと静的解析の組み合わせで計装なしにログメッセージを個々のリクエストに帰属させる。 - 代表例: [[lprof]](OSDI 2014) - 長所: ソースコード改変不要、本番環境にそのまま適用可能、履歴解析が可能 - 短所: ログを出力しない処理は追跡不可; Java/JVM に限定(lprof の場合); ログの質に依存 ### 半自動ログ解析 開発者が手動でモデルを生成し、そのモデルに基づいてログを解析する。 - 代表例: SALSA、Mochi(いずれも Hadoop 向け) - 長所: 精度が高い - 短所: スケールしない; 新しいシステムへの適用に人手が必要 ## 横断的知見 - **「固有リクエストID」の有無が計装ベースと非侵入手法の精度差を決定的に生む**: lprof は識別子がない場合でも静的解析(DAG・データフロー解析・通信ペア解析)で88.2%を達成するが、著者自身が「全ログメッセージにユニークな per-request ID があれば精度が大幅に改善する」と述べる。OpenTelemetry の Trace Context 伝搬が普及した現代では、この前提が変わりつつある——計装コストが下がることで非侵入手法の存在意義は「レガシーシステムへの適用」に収束する可能性がある。(Source: [[@2014__OSDI__lprof - A Non-intrusive Request Flow Profiler for Distributed Systems]]) - **静的解析の知識が「ログを解釈する鍵」であり、動的なトレーシングとは異なる設計圧力**: lprof が静的解析で学ぶのは「どのログ出力文がどの変数値を出力するか」「どのメソッドが同一リクエストを処理するトップレベルメソッドか」「どのスレッドがどのスレッドと通信するか」の3種の構造知識。この知識はシステムのコードが変わると再取得が必要であり、継続的デプロイ環境では「コード変更のたびに静的解析を再実行」という運用コストが発生する。一方、計装ベースは各スパンに文脈を持たせるため、コード変更に対する適応コストが低い。(Source: [[@2014__OSDI__lprof - A Non-intrusive Request Flow Profiler for Distributed Systems]]) - **「リクエストDB + SQL クエリ」のアーキテクチャが診断インタラクションの柔軟性を大幅に高める**: gprof-like 出力、時系列レイテンシグラフ、ノード別レイテンシ比較、リクエストクラスタリングによるボトルネック特定のすべてを単一のリクエストテーブルへの SQL クエリとして統一した。診断者が仮説を変えるたびに異なるクエリを発行でき、「異常を見る → 仮説を立てる → 検証する」ループが容易になる。これは後の LLM エージェントが tool call でテレメトリを探索的に消費するパターンの前身と見られる。(Source: [[@2014__OSDI__lprof - A Non-intrusive Request Flow Profiler for Distributed Systems]]) ## 未解決の問い - OpenTelemetry の普及と自動計装(Java エージェント等)によって、lprof のような「コード改変なし」手法の相対的な価値はどう変化したか。現代のエンタープライズでは既存計装と非侵入手法のどちらが支配的か。 - lprof の静的解析は Java バイトコードを前提とするが、Go・Rust・Python などの現代の分散システム言語への適用可能性はあるか。LLVM IR への一般化の難易度はどの程度か。 - 非侵入ログ縫合とネットワーク層の受動的なトレーシング([[分散トレーシング]]の DeepFlow・ChainScope 系)は同じ「計装なし」の目標に向かうが、前者がログ + バイトコード解析、後者がネットワークパケット解析を使う。両者を組み合わせてカバレッジを上げることは可能か。 - lprof が診断できなかった35%の実世界異常のうち、LLM エージェントによるテレメトリ探索[[Fault Localization]]でカバーできるケースはどれだけあるか。 ## 関連 - 概念: [[分散トレーシング]] / [[非侵入プロファイリング]] / [[ログ解析]] / [[Fault Localization]] / [[サービス依存性発見]] - エンティティ: [[lprof]] / [[Xu Zhao]] / [[Ding Yuan]] / [[Michael Stumm]] / [[University of Toronto]] - ソース: [[@2014__OSDI__lprof - A Non-intrusive Request Flow Profiler for Distributed Systems]] - 関連 MOC: [[SRE - MOC]] / [[AIOps - MOC]] ## 出典 - [[@2014__OSDI__lprof - A Non-intrusive Request Flow Profiler for Distributed Systems]](全ページ精読。§3 概要、§4 静的解析、§5 ログ解析、§6 評価、§7 制限、§8 関連研究)