シャドウトラフィックとは?
シャドウトラフィック(またはトラフィックミラーリング)は、本番環境の実リクエストのコピーをサービスの新バージョンに送り、その応答を破棄するもので、ユーザーへの影響ゼロで実負荷の下でテストできるようにします。
シャドウトラフィックを使えば、本物の本番リクエストを用いて新バージョンを試すことができ、しかもそれらのリクエストが新バージョンに依存することはありません。新バージョンは実際のトラフィックパターンを目にしますが、ユーザーはその出力を決して見ません - ライブ体験にリスクを与えることなく、現実的なリハーサルが得られるのです。
ミラーリングの仕組み
proxyまたはservice meshが受信リクエストを複製します。オリジナルは通常どおりライブサービスへ送られ、コピーがシャドウバージョンへ送られます。シャドウはリクエストを処理しますが、その応答は捨てられます。ユーザーは完全に実バージョンによって処理され、シャドウの影響を受けることは決してありません。
何をテストするか
シャドウトラフィックは、合成テストが見逃す実世界のリクエスト形状、ボリューム、エッジケースを新バージョンがどう処理するかを検証します。本物の負荷の下で、その出力、レイテンシ、リソース使用量を現行バージョンと比較でき、いかなるユーザーも晒される前に問題を表面化させられます。
副作用への注意
最大の危険は副作用です。シャドウバージョンがデータベースに書き込んだり、メールを送信したり、決済APIを呼び出したりすると、本来は不可視であるはずのトラフィックから実世界の結果を引き起こしかねません。シャドウイングが真に無害であり続けるには、書き込みと外部呼び出しを慎重に分離する必要があります。
応答の比較
強力な使い方の一つが応答の比較です。同じ実リクエストに対して旧コードと新コードを実行し、出力をdiffします。不一致は、そうでなければ本番環境でしか見つからない挙動のリグレッションを明らかにします。これにより、シャドウトラフィックは重要なパスのリスクの高いリファクタリングを検証する優れた手段になります。
どこに位置づけられるか
シャドウトラフィックは、backendに焦点を当てたダークローンチの一形態です。新しいサービスのバージョンの性能と正しさの検証に特に有用で、実ユーザーを晒すcanary releaseを補完し - 誰かを晒す前に徹底的にテストできるようにします。
重要なポイント
- シャドウトラフィックは、実リクエストを新バージョンにミラーリングし、その応答を破棄します。
- ユーザーへの影響ゼロで、実世界の負荷と正しさをテストします。
- ミラーリングされたリクエストが実際の結果を引き起こさないよう、副作用を分離しなければなりません。