gpt4 book ai didi

java - 可以使用蓝/绿部署部署 GWT 应用程序吗?

转载 作者:行者123 更新时间:2023-11-29 09:01:57 26 4
gpt4 key购买 nike

我读了 Martin Fowler 的 Blue/Green Deployment文章,真的很喜欢。基本上,这是您拥有 2 个生产级环境的概念:一个“蓝色”LIVE 环境和一个“绿色”LIVE 环境。在任何给定时间,您只有 1 个环境被认为是“真实的”实时环境。因此,您在这两个 LIVE 环境前面放置了某种路由/切换机制(可能是中间网络应用程序或修改后的软件负载平衡器),用于指示用户被路由到哪个环境(我们在这里谈论网络应用程序)。

因此,您让所有用户都被路由到例如 http://green.example.com/myapp 的 Green LIVE 环境。然后,当您准备好推出一些新的生产更改时,您可以将它们部署到 Blue LIVE,而不是将它们部署到 Green LIVE,并开始将一小部分 (~10%) 的用户路由到 Blue LIVE。典型的策略是让路由器使用 IP 地址或 cookie 来确定应该将用户路由到蓝色还是绿色。

当您确信您的生产更改(应用于 Blue LIVE)没有错误错误/问题时,您重新配置路由器,现在将所有流量重定向到位于 http://blue 的 Blue LIVE .example.com/myapp.

现在,进入我的问题:

我正在设计一个 GWT 应用程序,并想实现这种蓝/绿切换模式。问题是 GWT 应用程序是客户端的,不遵循 Spring、Struts、JSP、servlet 应用程序使用的普通服务器端 Web 应用程序架构。

所以我问:我如何拥有 2 个 Tomcat 实例(Blue Tomcat 和 Green 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/myappgreen.example.com/myapp。我不相信 GWT(我在这里使用 RequestFactory)一旦 GWT 应用程序最终会知道与 bluegreen 进行通信下载到客户端。

所以我问:这可能吗?是否有任何特殊的配置/代码/库/技术等。我需要利用才能完成这项工作?我没有想到的任何警告或陷阱?提前致谢!

最佳答案

无论部署策略如何,都需要相同的部署准备工作:蓝绿、金丝雀(请参阅您的另一个问题 Canary release strategy vs. Blue/Green 以了解差异的讨论)或升级单个服务器。单个客户端的成功升级的浏览器级别 View 是相同的:每个请求看到旧版本,部署发生,每个请求现在看到新版本。同样,单个客户端浏览器级别的失败升级和回滚 View 是相同的。

几年前,当我使用 GWT 应用程序时,我们的策略是捕获 GWT 在服务器上遇到新的不兼容版本时抛出的异常,并向用户显示一条消息,要求他们刷新浏览器。本文提供了更多细节:http://codebetter.com/kylebaley/2012/01/06/deploying-a-new-version-of-a-gwt-app-2/它还提到,如果你使用 Google App Engine,你可以使用 GAE 的 Channel API 来检测你的应用程序的新版本已经发布,然后要求用户刷新。但同样,无论您遵循什么策略,它都适用于任何部署过程。

关于java - 可以使用蓝/绿部署部署 GWT 应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16874000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com