負荷テストシナリオ設計の原則
適切な負荷テストシナリオを設計するための考え方と原則を学びます。
なぜシナリオ設計が重要か
┌─────────────────────────────────────────────────────────────┐
│ シナリオ次第で結果が全く変わ る │
├─────────────────────────────────────────────────────────────┤
│ │
│ 同じシステムでも: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 悪いシナリオ → 10,000 req/s 出る(本番では出ない) │ │
│ │ 良いシナリオ → 500 req/s で飽和(本番の実態に近い) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 差が生まれる原因: │
│ ┌───────────────────────────── ────────────────────────┐ │
│ │ ・キャッシュヒット率の違い │ │
│ │ ・DBアクセスパターンの違い │ │
│ │ ・リクエスト間隔の違い │ │
│ │ ・処理の重さの違い(軽いAPIだけ vs 重いAPIも含む) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 目的: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 本番環境の挙動を可能な限り再現し、 │ │
│ │ 信頼できる性能データを得ること │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
テスト種類と目的
シナリオを設計する前に、「何を知りたいのか」を明確にしましょう。
| テスト種類 | 目的 | シナリオ概要 |
|---|---|---|
| Load | 想定負荷でSLOを満たせるか確認 | ランプアップ → 定常負荷 → クールダウン。現実的な Think Time、本番のエンドポイント比率を再現 |
| Stress | 限界を探る(どこで壊れるか) | 段階的に負荷を上げ続ける、または限界付近で固定して観察。ボトルネック特定が目的なら Think Time 短めでもOK |
| Spike | 急激な負荷変動への耐性確認 | 低負荷 → 急激に高負荷 → 低負荷。オートスケールの動作確認 |
| Soak | 長時間でメモリリーク等を検出 | 中程度の負荷を長時間(4〜24時間)継続。メモリ使用量、GC頻度をモニタリング |
目的によってシナリオの作り方が変わる
- Load テスト: 本番を忠実に再現することが重要
- Stress テスト: ボトルネック特定が目的なら、シンプルなシナリオでもOK
- Spike テスト: 負荷パターン(急激な変動)が重要
- Soak テスト: 長時間安定して動くことが重要