部署大型Java Web应用程序(> 100 MB .war)时,我正在使用以下部署过程:
这种方法的好处:
这种方法的坏处:
我想找到一个具有以下属性的部署过程:
题:
发布于 2018-03-23 15:22:19
由于这个答案是第一次写的,所以出现了一个更好的方式将war文件部署到tomcat中,并且零宕机。在最新版本的tomcat中,你可以在你的war文件名中包含版本号。因此,例如,您可以同时部署文件ROOT##001.war
和ROOT##002.war
相同的上下文。之后的所有内容##
被tomcat解释为版本号,而不是上下文路径的一部分。Tomcat将保持您的应用程序的所有版本运行,并将新的请求和会话提供给最新的版本,同时完美地完成旧版请求和会话。指定版本号也可以通过tomcat管理器甚至catalina ant任务完成。更多信息在这里。
Rsync往往对压缩文件无效,因为它是增量传输算法查找文件中的变化,并且稍微更改未压缩的文件,可以彻底改变最终的压缩版本。出于这个原因,如果网络带宽证明是瓶颈,那么rsync可能是非常有意义的rsync一个未压缩的war文件而不是一个压缩版本。
使用Tomcat管理器应用程序执行部署有什么问题?如果您不想将整个war文件直接从远程位置上传到Tomcat管理器应用程序,则可以将其(未按上述原因压缩)rsync同步到生产框上的占位符位置,重新打包为一场战争,以及然后把它交给经理本地。Tomcat附带的一个很好的ant任务允许您使用Tomcat管理器应用程序对脚本进行脚本编写。
你没有提到的方法还有一个缺陷:当你的应用程序部分部署时(在rsync操作期间),你的应用程序可能处于一个不一致的状态,即更改后的接口可能不同步,新的/更新的依赖关系可能会不可用等。另外,根据您的rsync作业需要多长时间,您的应用程序可能实际上会重新启动多次。您是否知道您可以并应该关闭Tomcat中的侦听更改文件和重新启动行为?实际上不推荐用于生产系统。您始终可以使用Tomcat管理器应用程序手动或通过脚本重新启动应用程序。
当然,您的应用程序在重新启动时将不可用。但是,如果您对可用性非常关注,那么负载平衡器后面肯定会有冗余Web服务器。在部署更新的war文件时,您可以暂时让负载平衡器将所有请求发送到其他web服务器,直到部署结束。冲洗并重复您的其他Web服务器。
https://stackoverflow.com/questions/-100007755
复制相似问题