Canary デプロイメント
定義
新バージョン(Canary)を全トラフィックの一部(例:1%、5%)にだけ流し、既存バージョン(Control)と比較しながら段階的にロールアウトするパターン。
炭鉱のカナリアに由来:有毒ガス検知に使われたように、少数のユーザーで問題を先に検知する。
全トラフィック
├─ 1% → [Canary v2] ← SLIを監視
└─ 99% → [Control v1] ← ベースラインとして比較
なぜ重要か
- 全ユーザーへの一括デプロイはリスクが高い
- ステージング環境では本番と同じトラフィックパターンを再現できない
- Canaryで問題を検知しても影響ユーザーは最小限
適用場面
- データベーススキーマの変更を伴うデプロイ
- パフォーマンスに影響する可能性のある変更
- 新しいインフラコンポーネントへの移行
実装の要点
比較指標の選び方:
- 絶対値より比率(Canary vs Control の差分)を見る
- レイテンシ、エラー率、ビジネスメトリクス(購入完了率など)
- 「統計的に有意な差」が出るまで待つ
自動中止条件:
- Canaryのエラー率がControlの2倍を超えたら自動ロールバック
- あらかじめしきい値を定義しておく
注意点:
- Canaryと新バージョンを複数同時に展開しない(信号が汚染される)
- 共有インフラ(DBなど)への変更はCanaryで分離できない
段階的ロールアウトのステップ例
- 1% → 問題なければ
- 5% → 問題なければ
- 20% → 問題なければ
- 50% → 問題なければ
- 100%(完全切り替え)
関連パターン
- 段階的デプロイ — Canaryを含むより広いデプロイ戦略
- 設定変更の安全なロールアウト — 設定変更への同様のアプローチ
出典
Google SRE Workbook(Betsy Beyer他)第16章「Canarying Releases」