【しゃどうでぷろい】
シャドウデプロイ とは?
最終更新:
💡 本番のリクエストをコピーして、新バージョンを観測する
本番リクエストのコピーを検証用の新バージョンにも送り、その応答をユーザーへ返さずに挙動を観測する方法。書き込み・外部送信・負荷の分離が必要。
📌 このページのポイント
- 本番側がユーザーへ応答し、コピーを受けたシャドウ側の応答はユーザーへ返さない
- トラフィックミラーリングやshadowingとも呼ばれ、全部ではなく一部のリクエストだけを複製する構成もある
- エラー率・処理時間・ログなどを観測する。応答内容の比較には別途記録・照合の仕組みが必要
- DB書き込み・決済・メール送信などが二重に実行されないよう、検証側の副作用を分離する
- コピーの処理や共有基盤への負荷、個人情報の扱いに注意する。無影響・コストが必ず2倍とはいえない
カナリアリリースとは何が違うの?
カナリアは一部の利用者に新バージョンの応答を返すよ。シャドウでは通常の本番側が応答し、新バージョンにはリクエストのコピーを送る。新しい応答をユーザーへ返さずに、実際に近い入力で試すための方法なんだ。
応答を返さないなら、何を確認できる?
新バージョンのログ、エラー率、処理時間などを観測できるよ。応答の内容も比較したければ、両側の結果を記録して照合する仕組みが必要。ミラーリングを設定するだけで、結果の正しさまで自動判定してくれるわけではないんだ。
ユーザーには影響しないから安全なの?
応答を返さなくても、処理は実行される点が大事だよ。新バージョンが本番DBを書き換えたり、決済やメールを実行したりすると影響が出る。検証用DB・外部サービスのテスト環境などへ分離し、本番への書き込み権限も制限しよう。
読み取りのリクエストなら全部コピーしてもいい?
検証できたら新バージョンへ自動で切り替わる?
切り替えは別の工程だよ。許容するエラー率や結果の差、停止条件を決めて観測し、その後にカナリアやブルーグリーンなどで公開する。シャドウだけでは、実際に新しい応答を受け取る画面の動きや外部連携をすべて確認できないんだ。
もっと詳しく知りたい人へ
コストは必ず2倍になる?
一律ではありません。複製する割合、新バージョンの台数、ログ保存量、共有する基盤によって変わります。本番と同じ容量を丸ごと追加すれば大きく増えますが、一部だけを複製する構成もあります。負荷、費用、観測できる範囲をあわせて決めてください。
Istioでミラーリングすると応答も自動比較される?
されません。公式のMirroring手順ではミラー先へ非同期に送信し、その応答は破棄します。内容の比較にはアプリ側などで記録・照合を追加します。時刻や乱数で結果が変わる項目は除外し、同じ条件で比較できるデータを決める必要があります。
まとめ:ざっくりこれだけ覚えればOK!
「シャドウデプロイ」って出てきたら「ユーザーへの応答を切り替えず、本番リクエストのコピーで新バージョンを検証する方法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Shadow Deployment」 = 影で行うデプロイ・検証
💬 本番の応答経路とは別に新バージョンを動かすことを、影にたとえた呼び方。shadowingやトラフィックミラーリングという表現も使われるよ