# 暗黙のコンテキスト伝搬 ## 定義 暗黙のコンテキスト伝搬(implicit context propagation)とは、分散トレーシングにおいてトレース ID・スパン ID などの識別子をパケットのヘッダやペイロードに明示的に挿入することなく、ネットワーク通信に本来含まれる情報(TCP シーケンス番号・スレッド ID・時刻情報・X-Request-ID など)のみからスパン間の因果関係を推論する手法である。[[DeepFlow]](SIGCOMM 2023)が提案した設計手法で、「コンテキスト伝搬に必要な情報はネットワーク関連データにすでに含まれている」という洞察に基づく。(Source: [[@2023__SIGCOMM__Network-Centric Distributed Tracing with DeepFlow]]) 対義語は**明示的コンテキスト伝搬**(explicit context propagation)。OpenTelemetry・Zipkin・Jaeger など従来のフレームワークは、リクエストのヘッダ(W3C Trace Context・B3 Propagation 等)またはペイロードにコンテキスト情報を埋め込み、サービス間で伝播させる。 ## DeepFlow の実装 DeepFlow は次の 4 種の情報を多層的に統合して因果連鎖を再構成する: 1. **スレッド ID + 時刻情報**: 同一スレッド内のコンポーネント内関連付け。カーネルと用スレッドが 1:1 対応する場合はカーネルで実行可能 2. **TCP シーケンス番号**: コンポーネント間関連付け。L2/L3/L4 転送はシーケンスを変更しないため、送受信側スパンを接続できる 3. **X-Request-ID**: クロスレッドコンポーネント内関連付け。HAProxy・Envoy・Nginx が X-Request-ID を標準的に生成・伝達する 4. **サードパーティトレース ID**: OpenTelemetry 等の reserved header field を解析して取り込む これらを反復アルゴリズム(デフォルト 30 回反復)で統合し、トレースを組み立てる。 ## 横断的知見 - **「ネットワーク固有の不変量を利用する」という発想が非侵入性の実現を可能にする**: 明示的コンテキスト伝搬はパケット改変のためアプリケーションコードへの侵入が避けられず、クローズドソースコンポーネントや異言語混在環境では使えない。暗黙のコンテキスト伝搬は TCP シーケンスのような「転送で変わらない」情報を利用することで、ネットワーク中心計装([[eBPF]])と組み合わせて完全なゼロコード計装を実現する。博士論文の socket-based tracing と同じ「ネットワークスタックで捕捉」という発想の延長線上にあるが、スパン間の因果をネットワーク情報から再構成する点でより積極的に「ネットワーク情報の意味論を利用」している。(Source: [[@2023__SIGCOMM__Network-Centric Distributed Tracing with DeepFlow]], [[@2025__Kyoto University__Scaling Telemetry Workloads in Cloud Applications - Techniques for Instrumentation, Storage, and Mining]]) - **「明示的 vs 暗黙的」の対比は計装コストと盲点カバレッジのトレードオフを再設定する**: 明示的コンテキスト伝搬は「誰が何をいつ呼んだか」の意味的明確さと引き換えにユーザーの計装工数を要求する。暗黙のコンテキスト伝搬は計装工数ゼロで済む一方、推論ベースのため「意図しない関連付け(偽陽性)」や「関連付け欠落(偽陰性)」のリスクを伴う。DeepFlow はセッション集約タイムウィンドウ(60 秒)と 16 ルールによる親スパン決定でこのリスクを制御している。(Source: [[@2023__SIGCOMM__Network-Centric Distributed Tracing with DeepFlow]]) ## 未解決の問い - TCP シーケンスは L4 転送で不変だが、QUIC(UDP ベース)やさらなる NAT/透過型プロキシの普及で「転送で不変な情報」が減少した場合、代替の不変量はあるか。 - 暗黙の推論ベースのため、メッセージキューやストリーミング(1 対多・多対多通信)での関連付けが困難。これらのシナリオへの拡張はどう設計するか。([[@2023__SIGCOMM__Network-Centric Distributed Tracing with DeepFlow]]) - スレッド再利用・コルーチン多重化(Golang 等)では時刻ベースのトレース分割が必要になるが、精度の保証はどう行われるか。 ## 関連 - ソース: [[@2023__SIGCOMM__Network-Centric Distributed Tracing with DeepFlow]] - 概念: [[分散トレーシング]] / [[eBPF]] / [[動的インストルメンテーション]] / [[テレメトリ]] - エンティティ: [[DeepFlow]] / [[OpenTelemetry]] ## 出典 - [[@2023__SIGCOMM__Network-Centric Distributed Tracing with DeepFlow]](§3.3 暗黙のコンテキスト伝搬の設計、§3.3.1 スパン構築、§3.3.2 トレースアセンブル、アルゴリズム 1)