# サービス依存性発見
## 定義
サービス依存性発見(service dependency discovery)とは、エンタープライズネットワークや分散システムにおいて、あるアプリケーションやサービスが正常動作するために依存している他のサービス群を自動的に特定する取り組みである。サービス A がサービス B に依存する(A → B)とは、A が一部のリクエストに応答するために B が必要であることを意味する。知識を持つシステムオーナーへのインタビューや展開ドキュメントに頼らず、観測データから自動的に依存グラフを構築することが目標である(Source: [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]])。
依存グラフの主要な用途は障害箇所特定(Fault Localization)、再構成計画(reconfiguration planning)、影響範囲分析(impact analysis)である。Sherlock はこの依存グラフをベイズ推論と組み合わせてエンタープライズ障害箇所特定に活用した(参照 [8] in 論文)。
## アプローチ分類
サービス依存性を発見するアプローチは大きく三つに分類できる:
### 計装ベース(Instrumentation-based)
アプリケーションやミドルウェアを改変してリクエストの実行パスを追跡する。Pinpoint(J2EE)・X-Trace・Magpie が典型例。精度が高いが、全アプリケーションへの計装が必要で大規模エンタープライズには適用困難。(Source: [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]] §2)
### 能動テストベース(Active perturbation-based)
候補サービスを一時的にブロックして依存関係を確認する。Project5・WAP5・Brown et al. が採用。事前に候補リストが必要で大規模環境ではスケールしない。(Source: [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]] §2)
### 受動観測ベース(Passive traffic-based)
ネットワークトラフィックのパケットヘッダとタイミング情報のみから依存関係を推論する。計装不要・非侵入的でスケーラブル。
- **共起確率ベース**: Sherlock(条件付き確率 + 固定ウィンドウ W)、eXpose(JMeasure + W = 1s)
- **遅延分布スパイクベース**: Orion(FFT + 低域フィルタ → 典型スパイク検出)
詳細は [[受動観測ベース依存性推論]] を参照。
## 横断的知見
- 受動観測ベース手法の共通の課題は**固定ウィンドウサイズ W の選択困難性**である: W が小さいと遅延の大きい依存関係を見逃し、W が大きいと無関係なサービスの共起が増える。Orion はスパイク検出により W 依存性を排除した。(Source: [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]])
- **グランドトゥルースを用いた定量評価**がこの分野に長年欠けていた: Sherlock・eXpose は偽陽性・偽陰性を定量化しなかったのに対し、Orion は五つのアプリケーションの展開ドキュメントをグランドトゥルースとして初めて TP/TN/FP/FN を計測した。(Source: [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]])
- **手動テストとの組み合わせが実用的な精度への道**: 受動観測ベースの完全自動化は偽陽性ゼロを達成できないが、候補セットを 50〜44,000 倍に絞り込むことで外部テストコストを大幅に削減できる。Orion では 158 候補から 35 真依存関係を約 1 営業日で特定できた。(Source: [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]])
## 未解決の問い
- 現代のマイクロサービス環境(コンテナ・クラウド)では HTTP/gRPC など高レベルプロトコルが主流であり、IP ヘッダのみで正確なフロー境界を決定できるか?
- 動的に依存先が変わる P2P アプリケーションや、サービスメッシュ(Envoy/Istio のようなサイドカー)環境では遅延スパイク手法は適用可能か?
- Orion の遅延スパイク検出と現代の分散トレーシング(OpenTelemetry 等)を組み合わせることで、トレースが取れない「ブラックボックス」コンポーネントとの依存関係も推論できるか?
- [[暗黙のコンテキスト伝搬]]と受動観測ベース依存性推論は相補的か競合的か? コンテキスト伝搬はトレースができないレガシーシステムには使えない一方、Orion のような受動観測手法は計装不要で動作できる。
## 関連
- 手法: [[トラフィック相関分析]] / [[受動観測ベース依存性推論]]
- 応用: [[Fault Localization]] / [[マイクロサービスコールグラフ]]
- 代替アプローチ: [[暗黙のコンテキスト伝搬]](計装ベース)
- ソース: [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]]
- 著者: [[Xu Chen]] / [[Ming Zhang (Microsoft Research)]] / [[Z. Morley Mao]] / [[Paramvir Bahl]]
## 出典
- [[@2008__OSDI__Automating Network Application Dependency Discovery - Experiences, Limitations, and New Solutions]](Orion, OSDI 2008)