このトピックでは、ブルーグリーンデプロイメント、A/Bテスト、カナリアリリースなど、業界で広く使用されているサービスリリース戦略について説明します。
ブルーグリーンデプロイメント
ブルーグリーンデプロイメントは、サービスをリリースするための冗長デプロイメント手法です。リリース前に、サービスは同じインスタンスタイプとインスタンス数量を持つ2つのバージョンでデプロイされます。元のバージョンはサービスを提供し、新しいバージョンはホットスタンバイモードで待機します。サービスバージョンをアップグレードする場合は、トラフィックを新しいバージョンに切り替え、元のバージョンをホットスタンバイモードにすることができます。この冗長デプロイメント方式により、新しいバージョンに十分なリソースが確保されます。リリース後に新しいバージョンで問題が発生した場合、トラフィックを元のバージョンに戻すことができます。これにより、障害復旧時間が短縮されます。新しいバージョンが修正され、再デプロイされた後、トラフィックをこのバージョンに戻すことができます。
ブルーグリーンデプロイメントは、サービスリリース中の可用性を確保するために追加のインスタンスリソースを使用します。
次の図は、サービスの元のバージョン v1 がトラフィックを処理し、新しいバージョン v2 がホットスタンバイモードでデプロイされていることを示しています。サービスバージョンをアップグレードする場合、トラフィックを v2 に切り替えることができます。

v2 で問題が発生した場合、次の図に示すように、v1 への迅速なロールバックが実行されます。

メリット:
実装が簡単で、O&M が容易です。
サービスのアップグレードが簡単かつ迅速に実行できます。
デメリット:
冗長リソースが必要です。2つの同一の運用環境をデプロイする必要があります。
新しいバージョンで問題が発生した場合、より多くのサービスに影響します。
A/Bテスト
A/Bテストは、ユーザーリクエストのメタデータに基づいて、トラフィックをサービスの新しいバージョンにルーティングします。 A/Bテストは、リクエストコンテンツに基づいてルーティングを制御するカナリアリリース戦略です。特定のルールに従うリクエストのみが新しいバージョンにルーティングされます。一般的なルーティング方法には、HTTPヘッダーとCookieがあります。 User-Agent 値が Android のリクエストのみが新しいバージョンにアクセスできるように指定できます。 Android以外のユーザーは引き続き元のバージョンにアクセスできます。 Cookieベースのルーティングルールを設定することもできます。 Cookieには、ビジネスセマンティクスに関連するユーザーデータが含まれています。たとえば、通常ユーザーは新しいバージョンにアクセスでき、VIPユーザーは元のバージョンにアクセスできるようにすることができます。
次の図は、サービスの現在のバージョンが v1 で、リリースされる新しいバージョンが v2 であることを示しています。この場合、Android ユーザーは v2 にアクセスし、Android以外のユーザーは引き続き v1 にアクセスします。

v1 と v2 のアクセス成功率と応答時間 (RT) を監視できます。 v2 が期待どおりに動作する場合は、すべてのリクエストが v2 に切り替えられます。この場合、コストを削減するために v1 を段階的に廃止できます。

メリット:
特定のリクエストとユーザーにのみ新しいバージョンを提供するため、新しいバージョンで問題が発生した場合の影響は少なくなります。
異なるバージョンのリクエストを比較するために、完全な監視プラットフォームが必要です。
デメリット:
リクエスト容量を推定できないため、リソースの冗長性が必要です。
リリースサイクルが長くなります。
カナリアリリース
カナリアリリースは、少量のトラフィックをサービスの新しいバージョンにルーティングします。新しいバージョンをデプロイするために必要なインスタンスはほとんどありません。新しいバージョンが期待どおりに動作することを確認したら、2つのバージョンに割り当てるトラフィックの重みを変更しながら、トラフィックを元のバージョンから新しいバージョンに徐々に移行できます。このプロセス中に、新しいバージョンをスケールアウトし、元のバージョンをスケールインして、基盤となるリソースの利用率を最大化できます。
次の図は、サービスの現在のバージョンが v1 で、リリースされる新しいバージョンが v2 であることを示しています。スムーズでロスレスなバージョンアップグレードを確保するために、カナリアリリースを使用して、トラフィックを元のバージョンから新しいバージョンに徐々に移行できます。

メリット:
トラフィックは重みに基づいて新しいバージョンにルーティングされるため、新しいバージョンで問題が発生した場合の影響は少なくなります。
カナリアリリース中に新しいバージョンを徐々にスケールアウトし、元のバージョンをスケールインできるため、リソース利用率が向上します。
デメリット:
すべてのトラフィックが新しいバージョンに無差別にルーティングされるため、VIPユーザーのエクスペリエンスに影響を与える可能性があります。
リリースサイクルが長くなります。