【しゃどうでぷろい】

シャドウデプロイ とは?

最終更新:
💡 本番のリクエストをコピーして、新バージョンを観測する

本番リクエストのコピーを検証用の新バージョンにも送り、その応答をユーザーへ返さずに挙動を観測する方法。書き込み・外部送信・負荷の分離が必要。

📌 このページのポイント
シャドウデプロイの仕組み ユーザー リクエスト LB トラフィック ミラーリング v1(本番) レスポンスを返す v2(シャドウ) ユーザーへ返さない 本番側が応答 別途記録・比較 結果照合 性能測定 コピーの応答は返さない。影響ゼロの保証ではない DB書き込み・決済・メール・共有基盤の負荷を分離する
シャドウデプロイのイメージ
ひよこ ひよこ
カナリアリリースとは何が違うの?
ペンギン先生 ペンギン先生
カナリアは一部の利用者に新バージョンの応答を返すよ。シャドウでは通常の本番側が応答し、新バージョンにはリクエストのコピーを送る。新しい応答をユーザーへ返さずに、実際に近い入力で試すための方法なんだ。
ひよこ ひよこ
応答を返さないなら、何を確認できる?
ペンギン先生 ペンギン先生
新バージョンのログ、エラー率、処理時間などを観測できるよ。応答の内容も比較したければ、両側の結果を記録して照合する仕組みが必要。ミラーリングを設定するだけで、結果の正しさまで自動判定してくれるわけではないんだ。
ひよこ ひよこ
ユーザーには影響しないから安全なの?
ペンギン先生 ペンギン先生
応答を返さなくても、処理は実行される点が大事だよ。新バージョンが本番DBを書き換えたり、決済やメールを実行したりすると影響が出る。検証用DB・外部サービスのテスト環境などへ分離し、本番への書き込み権限も制限しよう。
ひよこ ひよこ
読み取りのリクエストなら全部コピーしてもいい?
ペンギン先生 ペンギン先生
最初は少ない割合で、負荷とデータの扱いを確認するほうがよいね。読み取りでも共有DBに負荷が増えるし、URLがGETでも副作用がないとは限らない。認証情報や個人情報を検証環境に送ってよいか、保存期間やアクセス権も確認する必要があるよ。
ひよこ ひよこ
検証できたら新バージョンへ自動で切り替わる?
ペンギン先生 ペンギン先生
切り替えは別の工程だよ。許容するエラー率や結果の差、停止条件を決めて観測し、その後にカナリアやブルーグリーンなどで公開する。シャドウだけでは、実際に新しい応答を受け取る画面の動きや外部連携をすべて確認できないんだ。
もっと詳しく知りたい人へ

コストは必ず2倍になる?

一律ではありません。複製する割合、新バージョンの台数、ログ保存量、共有する基盤によって変わります。本番と同じ容量を丸ごと追加すれば大きく増えますが、一部だけを複製する構成もあります。負荷、費用、観測できる範囲をあわせて決めてください。

Istioでミラーリングすると応答も自動比較される?

されません。公式のMirroring手順ではミラー先へ非同期に送信し、その応答は破棄します。内容の比較にはアプリ側などで記録・照合を追加します。時刻や乱数で結果が変わる項目は除外し、同じ条件で比較できるデータを決める必要があります。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「シャドウデプロイ」って出てきたら「ユーザーへの応答を切り替えず、本番リクエストのコピーで新バージョンを検証する方法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Shadow Deployment」 = 影で行うデプロイ・検証
💬 本番の応答経路とは別に新バージョンを動かすことを、影にたとえた呼び方。shadowingやトラフィックミラーリングという表現も使われるよ

参考資料

← 用語集にもどる