2

Martin Fowler のBlue/Green Deploymentの記事を読んで、とても気に入りました。基本的には、「ブルー」ライブ環境と「グリーン」ライブ環境の 2 つのプロダクション クラス環境があるという概念です。「実際の」ライブ環境と見なされる環境は、常に 1 つだけです。したがって、これら 2 つの LIVE 環境の前に何らかのルーティング/スイッチ メカニズム (おそらく中間 Web アプリまたは変更されたソフトウェア ロード バランサー) を配置し、ユーザーがどの環境にルーティングされるかを決定します (ここでは Web アプリについて説明します)。

したがって、すべてのユーザーが、たとえば の Green LIVE 環境にルーティングされますhttp://green.example.com/myapp。次に、いくつかの新しい本番環境の変更をプッシュする準備ができたら、それらを Green LIVE にデプロイする代わりに Blue LIVE にデプロイし、少数 (~10%) のユーザーを Blue LIVE にルーティングし始めます。一般的な戦略は、ルーターに IP アドレスまたは Cookie を使用させて、ユーザーを Blue と Green のどちらにルーティングするかを決定することです。

プロダクションの変更 (Blue LIVE に適用) にバグ バグ/問題がないことを確信したら、ルーターを再構成して、すべてのトラフィックを で Blue LIVE にリダイレクトしhttp://blue.example.com/myappます。

さて、私の質問に:

私は GWT アプリを設計しており、この青/緑の切り替えパターンを実装したいと考えています。問題は、GWT アプリがクライアント側であり、Spring、Struts、JSP、サーブレット アプリが利用する通常のサーバー側 Web アプリ アーキテクチャに従っていないことです。

だから私は尋ねます:どうすれば2つのTomcatインスタンス(Blue TomcatとGreen Tomcat)を持ち、同じGWTアプリの2つの異なるバージョンを青/緑の「ルーター」の後ろからユーザーに提供できますか? 「ルーター」とは、おそらくhttp://router.example.com/myapp-router.

視覚的には、ここに問題があります。

green.example.com:8080/opt/tomcat/webapps/myapp.war/  --> Green Tomcat
    myModule/
        mymodule.nocache.js
        mymodule.cache.html    } typical GWT app WAR structure...
    hosts/                       this is currently the "real" LIVE
        index.html               environment where 90% traffic is routed to
    css/
        main.css
    WEB-INF/
        web.xml
        lib/
        classes/

blue.example.com:8080/opt/tomcat/webapps/myapp.war/  --> Blue Tomcat
    myModule/
        mymodule.nocache.js
        mymodule.cache.html    } typical GWT app WAR structure...
    hosts/                       new production changes have been deployed here
        index.html               and 10% of users are routed here
    css/
        main.css
    WEB-INF/
        web.xml
        lib/
        classes/

router.example.com:8080/opt/tomcat/webapps/myapp-router.war/  --> Router
    WEB-INF/
        web.xml
        lib/          }    simple headless WAR that inspects HTTP Requests and
        classes/           determines which environment to redirect user to

これが基本的なアーキテクチャです。問題は、クライアントが にリクエストを送信しrouter.example.com/myapp-router、ルーターがそのリクエストをblue.example.com/myappまたはに転送することgreen.example.com/myappです。GWT (ここではRequestFactoryを使用しています) が、GWT アプリがクライアントにダウンロードされた後、blueまたはいずれかと通信することを最終的に認識するとは確信していません。green

だから私は尋ねます:これは可能ですか?特別な構成/コード/ライブラリ/テクニックなどはありますか?これを機能させるために利用する必要がありますか? 私が考えていない警告や落とし穴はありますか?前もって感謝します!

4

1 に答える 1