デプロイ戦略 — トラフィックをいつ新版へ移すか
新しいバージョンを本番に出す瞬間は、いちばん怖い瞬間でもあります。サービスを止めずに、しかも失敗したらすぐ戻したい――この2つを両立させるための手順がデプロイ戦略です。代表的なのがBlue-Green、カナリアリリース、ローリングアップデートの3つ。
3つの違いは結局、「新旧のサーバーをどう並べ、トラフィックをどの速さで移すか」だけです。下の図1で方式を切り替え、「次へ」を押しながらトラフィックの帯とサーバーの色が動く様子を見比べてください。途中で異常検知を押すと、方式ごとに切り戻しの重さが違うことも分かります。
違いは「切り替えの粒度」と「戻しやすさ」
Blue-Greenは、現行(Blue)とそっくり同じ新環境(Green)をまるごと用意し、ルーティングを一発で切り替えます。新旧が混在しないので挙動が読みやすく、切り戻しもルーティングを戻すだけで数秒。代わりに本番環境を2セット分持つコストがかかります。
カナリアリリースは、まず数%のユーザーだけを新版に流し、エラー率やレイテンシを見ながら比率を上げます。名前の由来は炭鉱のカナリア――不具合に最初に気づく少数を置く発想です。問題が出ても影響は数%に限られる代わりに、監視の指標とロールバック基準を決めておく必要があります。
ローリングアップデートは、サーバーを数台ずつ切り離して更新し、戻しては次へ、を繰り返します。追加の環境が要らずいちばん安く済みますが、更新中は新旧が混在し、処理できる台数も一時的に減ります。切り戻しは「もう一度全台を旧版へ回す」ことになり、Blue-Greenほど速くありません。Kubernetesの標準デプロイはこの方式です。
- Blue-Green
- 現行と新版の環境を2セット用意し、ルーティングを一度に切り替える方式。
- カナリアリリース
- ごく一部のトラフィックだけ新版に流し、問題がなければ段階的に比率を上げる方式。
- ローリングアップデート
- サーバーを数台ずつ順番に新版へ入れ替える方式。追加環境が不要な代わりに新旧が混在する。
- ロールバック
- 問題発生時に旧版へ戻すこと。どれだけ速く戻せるかが方式選びの決め手になる。
- サージ / 最小稼働数
- ローリング時に一時的に増やせる台数と、常に維持する稼働台数の設定。容量不足を防ぐ。
まとめ
3つの方式は優劣ではなくトレードオフの置きどころが違うだけです。Blue-Greenは環境2セット分のコストを払って切り替えと切り戻しの速さを買う。カナリアは監視の手間を払って障害の影響範囲を小さく抑える。ローリングはコストを抑える代わりに新旧混在と切り戻しの遅さを受け入れる。選ぶときの問いはいつも同じで、「壊れたとき、どれだけ速く・どれだけ小さく戻せるか」です。