J2EE Web应用程序生产中的热部署

如何在生产服务器上部署我的Java WAR文件,而无需停机。 我目前使用的是Apache2-> Jetty6,当我需要更新Web应用程序时,我将这个war解压缩到目录中,然后重新启动Jetty服务

/etc/init.d/jetty6 restart 

这可能需要5分钟的时间重新启动有另一种方式? “大”网站如何做到这一点?

根据我的经验,像JBoss这样的热部署失败了,因为垃圾收集器没有收集所有东西,服务/进程的内存不足,情况有所改善?

这个怎么样。 创build一个执行以下操作的脚本:

  • 在8081端口启动第二个docker实例。
  • 重新加载备用的Apacheconfiguration发送到8081stream量。我认为这一步应该是快速的。 我使用即时的nginx。
  • 杀死8080docker
  • 将更新后的战争复制到8080 jetty webapps文件夹中
  • 重新启动端口8080上的docker
  • 将apache指向8080
  • 杀死8081的docker

你有以下的事情要注意:

  • 会话(基于Cookie的会话)
  • 数据库结构的变化(即打破旧的应用程序)

为了让应用程序重新启动,您将需要一个中心位置来保持会话,即在应用程序之外。 例如2复制数据库或复制memcached。

对于数据库更改,您将必须确保新的应用程序仅指向具有新结构的数据库。 请勿删除字段或使新结构与旧应用程序不兼容。 例如,不要删除属性或更改其types。

configurationApache以使用2个应用程序服务器(可以在同一台服务器上运行)进行负载平衡。 使用会话粘性。 当其中一台服务器部署时,另一台可以回答请求。

大型网站使用分布式AS与服务器群集,循环DNS,负载平衡器…