# ネットワーク依存性発見 ## 定義 ネットワーク依存性発見(network service dependency discovery)とは、分散アプリケーションやエンタープライズネットワークを構成するサービス間で「どのサービスがどのサービスに依存しているか」を、手動設定調査ではなく観測データや能動実験から自動的に特定する取り組みである。依存性 A→B は、A の処理に B へのアクセスが必要、または B の遅延・劣化・障害が A の遅延・劣化・障害を直接または間接的に引き起こす関係を指す。結果は [[サービス依存グラフ]] や [[サービストポロジ]] として利用され、影響範囲分析、再構成計画、[[Fault Localization]] の基盤になる。(Source: [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]], [[@2012__LISA__On the Accurate Identification of Network Service Dependencies in Distributed Systems]], [[@2022__IPSJ JIP__Low Overhead TCP-UDP Socket-based Tracing for Discovering Network Services Dependencies]]) 主な観測粒度は、パケット、ソケット、トランザクションである。パケット/フロー観測は計装不要で広いカバレッジを持つが、相関を因果と誤る危険がある。ソケット観測は Linux カーネルの TCP/UDP 状態から通信を直接捉え、eBPF による低オーバーヘッド実装と相性がよい。トランザクション観測は [[分散トレーシング]] に近く、リクエスト単位の詳細を得られる代わりにアプリケーションやミドルウェアの計装を要する。 ## 横断的知見 - **Sherlock→Orion→NSDMiner→Rippler は、受動観測の偽陽性を段階的に削る系譜である**: Sherlock はパッシブ観測と Inference Graph で多層依存性を推論し、Orion は遅延スパイク分析で固定ウィンドウ依存を減らし、NSDMiner はネスト化フローと対数スコアリングで候補を削減した。Rippler は遅延注入により「遅延が伝播するか」を直接試すことで、受動観測全体の相関と因果のギャップに答えた。(Source: [[@2007__SIGCOMM__Towards Highly Reliable Enterprise Network Services via Inference of Multi-level Dependencies]], [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]], [[@2012__LISA__On the Accurate Identification of Network Service Dependencies in Distributed Systems]], [[@2014__INFOCOM__Rippler Delay Injection for Service Dependency Detection]]) - **固定ウィンドウは受動観測ベース手法の共通ボトルネックである**: 共起確率ベースの Sherlock/eXpose はウィンドウが小さいと遅延の大きい依存関係を見逃し、大きいと無関係な共起を拾う。Orion は遅延分布のスパイクに着目してこのパラメータ感度を下げたが、完全な偽陽性除去には至らない。(Source: [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]]) - **比率スコアから対数スコアへの変更は、観測量の多寡を信頼度へ組み込む設計である**: NSDMiner 初版の `weight(A→B) / weight(A)` は少数観測でも高スコアを出しやすい。Peddycord+ は `log_{weight(A)}(weight(A→B))` により、観測量が多い候補を適切に評価しつつ確信の増分を逓減させ、偽陽性を削減した。(Source: [[@2012__LISA__On the Accurate Identification of Network Service Dependencies in Distributed Systems]]) - **ソケットベース手法では「どこで集約するか」が CPU オーバーヘッドを決める**: ストリーミング方式はフローを即時にユーザー空間へ送るため RTT/s に比例して負荷が増える。カーネル内集約やフローバンドリングは、同一宛先サービスへの短命接続をカーネル内で束ね、転送量をサービス数に近づける。これは [[eBPF]] の「計装層で先に削減する」設計原則の具体例である。(Source: [[@2020__SAC__Black-box inter-application traffic monitoring for adaptive container placement]], [[@2022__IPSJ JIP__Low Overhead TCP-UDP Socket-based Tracing for Discovering Network Services Dependencies]]) - **依存グラフは、受動観測、能動実験、分散トレースの 3 系統が相補的に作る**: 受動観測は導入しやすいが因果の確証が弱く、遅延注入は因果を直接検証できるが実験コストが高い。分散トレーシングはリクエスト単位の正確な経路を得るが計装前提が重い。現代の [[サービス依存グラフ]] は、これらを単独で選ぶより、サービスメッシュ、eBPF ソケット観測、分散トレースを組み合わせる方向へ向かう。(Source: [[@2014__INFOCOM__Rippler Delay Injection for Service Dependency Detection]], [[@2022__IPSJ JIP__Low Overhead TCP-UDP Socket-based Tracing for Discovering Network Services Dependencies]]) ## 未解決の問い - Kubernetes、サービスメッシュ、mTLS、短命 Pod が一般化した環境で、(ip, port, protocol) ベースの依存表現はどこまで有効か。 - 受動観測で候補を絞り、能動的な遅延注入で偽陽性を落とすハイブリッド手法は、本番でどの程度の実験時間とリスクで運用できるか。 - NAT、ロードバランサ、サイドカー、プロキシが挟まる場合、ソケットベース観測はどの層の依存性を見ていると解釈すべきか。 - 1,000 サービス超の環境で、カーネル内フローバンドリングの集約率が低下する問題を階層的なサービスグループで緩和できるか。 - 正解の依存グラフをどう作るか。設計書、IaC、サービスメッシュ、トレース、LLM 抽出を組み合わせた ground truth 構築は可能か。 ## 関連 - 出力概念: [[サービス依存グラフ]] / [[サービストポロジ]] / [[リアルタイム依存性マップ]] - 隣接概念: [[マイクロサービスコールグラフ]] / [[トラフィック相関分析]] / [[遅延注入]] / [[分散トレーシング]] / [[eBPF]] / [[暗黙のコンテキスト伝搬]] - 応用: [[Fault Localization]] / [[コンテナ配置最適化]] / [[ブラスト半径]] - エンティティ: [[NSDMiner]] / [[go-conntracer-bpf]] / [[Orion]] ## 出典 - [[@2007__SIGCOMM__Towards Highly Reliable Enterprise Network Services via Inference of Multi-level Dependencies]](Sherlock、Inference Graph、多層依存性推論) - [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]](Orion、遅延スパイク、受動観測の評価) - [[@2012__LISA__On the Accurate Identification of Network Service Dependencies in Distributed Systems]](NSDMiner、対数スコアリング、依存性推論、サービスクラスタ検出) - [[@2014__INFOCOM__Rippler Delay Injection for Service Dependency Detection]](遅延注入による能動的依存性検証) - [[@2020__SAC__Black-box inter-application traffic monitoring for adaptive container placement]](カーネル内フロー集約とコンテナ配置最適化) - [[@2022__IPSJ JIP__Low Overhead TCP-UDP Socket-based Tracing for Discovering Network Services Dependencies]](eBPF による TCP/UDP ソケット観測とフローバンドリング)