私の過去の経験では、ブルー/グリーンスタイルの展開を有効にした方法は、そのアプリの本番環境サーバーのコピーである新しいリリースにいくつかのサーバーをプロビジョニングし、それらに新しいアプリバージョンを展開し、テストしてから、トラフィックルーティングをに切り替えることでした。新しいサーバーをポイントします。私の新しいチームでこれを提案したとき、彼らは、青/緑はIT環境全体にわたって存在するべきだという印象であると言いました-常に複製されているすべてのアプリとサーバーのコピーがあり、変更が行われると、前後に切り替えます。
1つのアプリが更新されるたびに何百ものサーバー上の何百ものアプリのルーティングを切り替えるのはかなりのオーバーヘッドのように思えたので、これは私を少し驚かせました。私は戻って Martin Fowlerの記事 を読み返しましたが、通常のスコープが何であるかがわかりません。彼は同じ環境について繰り返し話しますが、サンプル画像は1つのアプリスタック(1つの青いWebサーバー、アプリサーバー、データベース、およびそれぞれ1つの緑)のようです。私はウェブの他の場所で同様の説明を見つけました。誰もが重複した環境について話しますが、次に、単一のアプリのみに焦点を当てた例を示します。
それでは、ブルー/グリーン展開をどのようにセットアップしましたか?個々のアプリ/サービスレベルに焦点を当てているため、何か不足していますか?
単一のアプリケーションのみが更新されたときに、すべてのサーバー(各アプリケーションが個別のサーバーで実行されていると想定)に対してトリガーされる青/緑の展開が必要な理由がわかりません。私はそのようなシステムの利点が何であるかを理解するのに苦労しており、変更が加えられていないサーバーで切り替えるときに問題が発生する可能性が高まると想像するだけです。
私が見るように、青/緑の展開を使用する理由は3つあります。
更新されなかったアプリケーションを切り替えるメリットはなく、青と緑のサーバーの両方が最新バージョンになるため、3番目のメリットがなくなります。
最後の文であなた自身の質問にいくらか答えたと思います。個々のアプリ/サービスは個別に表示し、独自の青緑色の展開にする必要があります。
Martin Fowlerの記事は、Dockerが存在する前に書かれました。確かに、私自身の経験ではコンテナに偏っていますが、ここ数年、特に大規模な環境では、コンテナなしで青/緑のデプロイメントなどを行うことがますます珍しくなっていると思います。私は最近、サーバーレベルで青/緑を実行することについてのチュートリアルを、あなたが説明しているように、同僚が説明している方法は言うまでもなく見たことがありません。
コンテナーを使用すると、NomadやKubernetesなどのスケジューラーを使用して、アプリの次のバージョンをsameサーバーで起動できますが、同じWebサーバーとdbコンテナーを使用します(変更されていない場合)。チェックや他のテスト、あるいはその両方を行ってから、ロールバックまたは昇格します。