# Pinpoint
## 概要
Pinpoint は [[Mike Y. Chen]]、[[Emre Kıcıman]]、Eugene Fratkin、[[Armando Fox]]、[[Eric Brewer]](UC Berkeley / Stanford University)が DSN 2002 で発表した、大規模・動的インターネットサービス向けの問題判定フレームワークである。
静的依存モデルを必要とせず、J2EE ミドルウェア計装によるリクエストトレーシングと UPGMA クラスタリングを組み合わせ、アプリケーション知識なしで障害コンポーネントを特定する。
## 主な特徴
- **アプリケーション非侵入**: J2EE アプリケーション自体を変更せず、ミドルウェア(EJB・JSP・JSP タグ層)を計装するだけで動作する
- **動的リクエストトレーシング**: クライアントリクエストごとにユニーク ID を付与し、通過するコンポーネントをすべて記録する
- **成功/失敗対比によるクラスタリング**: 失敗リクエストに使われたコンポーネントと成功リクエストに使われたコンポーネントを UPGMA + ジャカール係数で比較し、障害コンポーネントを絞り込む
- **障害検知の二重化**: 内部(例外ログ)と外部(Snifflet による L7 パケットスニフィング)の両方で障害を検知する
## 評価結果
- 単一コンポーネント障害: 正解率 80〜90%、偽陽性率 40〜50%
- 単純な依存関係チェックより適合率が大幅に優れる(偽陽性率 40〜50% 対 80%)
- 実行時オーバーヘッド: スループット 8.4% 低下(J2EE PetStore での計測)
## 限界
- 常に一緒に使われる密結合コンポーネント群は個別に区別できない
- 共有状態を通じた非独立リクエスト障害には未対応
- 単一ノード実装のため、マシン境界をまたぐ分散トレーシングは将来課題
## 出典
- [[@2002__DSN__Pinpoint - Problem Determination in Large, Dynamic Internet Services]]