我阅读了 Martin Fowler 的Blue/Green Deployment文章,非常喜欢它。基本上,你有两个生产级环境的概念:一个“蓝色”LIVE 环境和一个“绿色”LIVE 环境。在任何给定时间,您只有 1 个环境被认为是“真实”的 LIVE 环境。因此,您在这两个 LIVE 环境之前放置了某种路由/切换机制(可能是中间 Web 应用程序或修改后的软件负载平衡器),以指示用户被路由到哪个环境(我们在这里谈论 Web 应用程序)。
因此,您的所有用户都被路由到了,例如,位于 的 Green LIVE 环境http://green.example.com/myapp
。然后,当您准备好推出一些新的生产更改时,而不是将它们部署到 Green LIVE,而是将它们部署到 Blue LIVE,并开始将一小部分(~10%)的用户路由到 Blue LIVE。典型的策略是让路由器使用 IP 地址或 cookie 来确定用户应该被路由到蓝色还是绿色。
当您确信您的生产更改(应用于 Blue LIVE 上)没有错误错误/问题时,您重新配置路由器,现在将所有流量重定向到 Blue LIVE 的http://blue.example.com/myapp
.
现在,关于我的问题:
我正在设计一个 GWT 应用程序,并希望实现这种蓝/绿切换模式。问题是 GWT 应用程序是客户端的,不遵循 Spring、Struts、JSP、servlet 应用程序使用的普通服务器端 Web 应用程序架构。
所以我问:我怎么会有 2 个 Tomcat 实例(蓝色 Tomcat 和绿色 Tomcat),从蓝色/绿色“路由器”后面为用户提供同一个 GWT 应用程序的两个不同版本?通过“路由器”,我可能在谈论一个中间网络应用程序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
所以我问:这可能吗?是否有任何特殊的配置/代码/库/技术等。我需要使用才能完成这项工作?我没有想到的任何警告或陷阱?提前致谢!