# Pinpoint: Problem Determination in Large, Dynamic Internet Services
## 論文情報
| 項目 | 内容 |
|---|---|
| タイトル | Pinpoint: Problem Determination in Large, Dynamic Internet Services |
| 著者 | Mike Y. Chen, Emre Kıcıman, Eugene Fratkin, [[Armando Fox]], [[Eric Brewer]] |
| 所属 | UC Berkeley(Chen, Brewer)、Stanford University(Kıcıman, Fratkin, Fox) |
| 発表媒体 | DSN 2002(International Conference on Dependable Systems and Networks) |
| 年 | 2002 |
## 概要(アブストラクト日本語訳)
従来の問題判定技術は、静的な依存モデルに依存しているが、これは今日の大規模・分散・動的なアプリケーション環境(電子商取引システム等)においては正確に構築・維持することが難しい。本論文では、これらの環境における問題判定を自動化する動的解析手法を提案する。具体的には、(1) 多数の実際のクライアントリクエストをシステム内で粗粒度にタグ付けして追跡し、(2) データマイニング技術を用いて、リクエストの成否と利用コンポーネントを相関させることで、障害の最も可能性の高い原因を特定する。本手法の検証のため、J2EE プラットフォーム上でアプリケーションコンポーネントの知識を必要とせずに根本原因分析を行うフレームワーク Pinpoint を実装した。Pinpoint は、クライアントリクエストを追跡する通信層、トラフィックスニフィングとミドルウェア計装を用いる障害検知器、およびデータ解析エンジンの 3 部構成からなる。各種アプリケーションコンポーネントへの障害注入によって Pinpoint を評価し、高い正解率で障害コンポーネントを特定し、偽陽性が少ないことを示す。
## 問題設定
大規模インターネットサービス(2002 年当時で Hotmail 7,000+台、Google 8,000+台)は、フロントエンドロードバランサ・ウェブサーバ・アプリケーションコンポーネント・バックエンドデータベースの多段構成を持ち、クライアントリクエストはこのシステム内で動的にルーティングされる。こうした大規模・動的なシステムで障害の根本原因を特定することは困難であり、当時の主な手法には以下の二種類の限界があった。
1. **静的依存モデルの維持困難**: 常に変化するシステムの正確な依存モデルを生成・維持することは難しい。
2. **複製コンポーネントの区別不能**: 静的モデルは論理システムのみをモデル化し、複数の複製インスタンスを区別できないため、問題のある特定インスタンスを特定できない。
既存のイベント相関システム(HP OpenView、IBM Tivoli 等)は専門家が設定するルールや静的依存モデルに依存しており、ダイナミックな大規模サービスへの適用が困難だった。
## 提案手法
### Pinpoint フレームワーク
Pinpoint は以下の 3 コンポーネントで構成される。
**1. クライアントリクエストトレーシング**
クライアントリクエストがシステムに到着した時点でユニーク ID を付与し、各コンポーネントを通過するたびにコンポーネント ID を記録する。アプリケーションを変更せず、ミドルウェア層(J2EE の場合は EJB・JSP・JSP タグの各層)を計装することで実現する。スレッドローカル変数にリクエスト ID を保持し、ネストしたコンポーネント呼び出し時にも引き継ぐ。
**2. 障害検知**
内部障害検知(コンポーネント境界を越える例外のログ記録)と外部障害検知(レイヤー 7 パケットスニファ「Snifflet」による TCP エラー・HTTP エラーの検知)を組み合わせる。外部障害検知は HTTP レスポンスヘッダのリクエスト ID を参照して、エンドツーエンドの失敗を検出する。
**3. データクラスタリング解析**
各リクエスト × コンポーネントの 2 値行列(表 1 参照)を構築し、「障害」という仮想データポイントを追加した上で非重み付きペアグループ平均法(UPGMA, Unweighted Pair-Group Method using Arithmetic Averages)とジャカール類似係数によるクラスタリングを実施する。障害データポイントとクラスタリングされたコンポーネント群が根本原因候補として出力される。
### 前提条件
- 通常ワークロードが利用可能なコンポーネントをさまざまな組み合わせで使用すること(カバレッジ)
- リクエストが互いに独立であること(状態を共有しないこと)
## 新規性
- **依存モデル不要のアプリケーション非侵入型アプローチ**: 静的依存モデルや設定知識を一切必要としない。J2EE ミドルウェアの計装のみで動作する。
- **成功・失敗リクエストの対比**: 「失敗リクエストに使われたコンポーネント」だけを見るのではなく、「成功リクエストには使われず、失敗リクエストに使われたコンポーネント」を絞り込む発想が基本的な識別力を生む。
- **複製コンポーネントの区別**: 論理コンポーネントではなく物理インスタンスを追跡することで、静的依存モデルの第 2 の限界を克服する。
## 実験設定
- 環境: J2EE PetStore デモアプリケーション(Sun J2EE 1.2 参照実装)
- サーバ: quad-PIII 500MHz, 1GB RAM, Linux 2.2.12
- ワークロード: TPC-W 型電子商取引ベンチマークを模倣したクライアントエミュレータ(検索・閲覧・新規アカウント作成・注文・チェックアウト等)
- テスト数: 133 件(単一コンポーネント障害、2〜4 コンポーネントの相互作用障害)
- 注入障害種別: 宣言例外・未宣言例外・無限ループ・ヌル呼び出しの 4 種類
- 実行時間: 各テスト 5 分間、テスト間にアプリケーションサーバを再起動
## 実験結果
- **単一コンポーネント障害**: 正解率 80〜90%、偽陽性率 40〜50%(依存関係チェックは同等の正解率で偽陽性率 80%、Pinpoint が優位)
- **多コンポーネント相互作用障害**: コンポーネント数が増えるにつれて ROC 曲線が悪化するが、依存関係チェック・障害検知と比較して依然優位を維持
- **依存関係チェック**: 常に 100% に近い正解率だが、適合率が常に約 15% 前後と低い
- **障害検知**: 適合率は高い(30%)が、3 コンポーネント以上の相互作用障害では正解率が 0% に落ちる
- **実行時オーバーヘッド**: Pinpoint のトレーシングにより PetStore スループットが 8.4% 低下。非圧縮トレースファイルはリクエストあたり 2.5KB、圧縮後は 100 バイト
![[fig-tightly-coupled-components.png]]
*図: 障害を注入した各コンポーネントに関連する密結合コンポーネントの数。cart, productItemList, SignOnEJB, ClientControllerEJB は 10 前後の密結合コンポーネントを持ち、精度改善の障壁となる。*
![[fig-components-per-request.png]]
*図: 動的ページリクエストごとに使用されるコンポーネント数のヒストグラム。平均 14.2、中央値 14、最大 23。コンポーネント数の多さがミドルウェア層での自動問題判定の必要性を示す。*
## 考察
### 強み
1. **汎用性**: J2EE アプリケーションであれば知識不要で適用可能
2. **スケーラビリティの見込み**: リクエストトレーシングは動的に変化するサービスに追従できる
3. **複製インスタンスの識別**: 静的依存モデルでは不可能な物理インスタンスレベルの障害特定が可能
4. **Recovery-Oriented Computing (ROC)との統合計画**: MTTR 削減を視野に入れた実装方針
### 弱点・課題
1. **密結合コンポーネント問題**: 常に一緒に使われるコンポーネント群は互いに区別できず、超集合を障害として報告してしまう。合成リクエストによる追加テストが緩和策として提案されている。
2. **状態汚染による非独立リクエスト**: 共有状態を通じた障害(例: パスワード設定コンポーネントの障害が後のログインに影響)には対応できない。データベーステーブルの追跡拡張が将来課題として挙げられている。
3. **パス依存的な障害**: 特定の入力(例: 不正なクッキー)が原因の決定論的障害は、他の障害と区別できない。
4. **フェイルスタッタ(性能劣化型障害)**: 内部的に障害をマスクしつつ性能が低下するケースは検知できない。タイミング情報の活用が必要。
5. **単一ノード実装の限界**: 実験時の J2EE 実装がクラスタリングをサポートしていないため、マシン境界をまたぐトレースは将来課題。
## 関連
- システム: [[Pinpoint]]
- 著者: [[Mike Y. Chen]], [[Emre Kıcıman]], [[Armando Fox]], [[Eric Brewer]]
- 組織: [[Stanford University]], [[UC Berkeley]]
- 概念: [[分散トレーシング]] / [[Fault Localization]] / [[根本原因分析]] / [[サービス依存性発見]] / [[統計的障害箇所特定]]
- 関連 MOC: [[SRE - MOC]] / [[異常検知 - MOC]]
## 出典
- Chen et al., "Pinpoint: Problem Determination in Large, Dynamic Internet Services," DSN 2002(§1 導入・問題設定, §2 フレームワーク設計, §3 実装詳細, §4 評価結果, §5 議論・将来課題)