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

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

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

/etc/init.d/jetty6 restart

这可能需要 5 分钟才能重新启动,还有其他方法吗?“大型”网站是如何做到的?

根据我的经验,JBoss 等热部署会失败,因为垃圾收集器没有收集所有内容,并且服务/进程会耗尽内存,情况是否有所改善?

答案1

怎么样?创建一个执行以下操作的脚本:

  • 在端口 8081 上启动 jetty 的第二个实例。
  • 重新加载备用 apache 配置以将流量发送到 8081。我认为这一步应该很快。我使用 nginx,它是即时的。
  • 杀死 8080 码头
  • 将更新的 war 复制到 8080 jetty webapps 文件夹中
  • 在端口 8080 上重新启动 jetty
  • 将 apache 重新指向 8080
  • 终止 8081 上的 jetty

答案2

您需注意以下事项:

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

为了在应用程序重启后保持会话,您需要一个中心位置来保持会话,该位置位于应用程序之外。例如,具有复制功能的 2 个数据库或具有复制功能的 memcached。

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

配置 apache 以使用 2 个应用服务器(可在同一台服务器上运行)的负载平衡。使用会话粘性。当部署其中一个服务器时,另一个服务器可以响应请求。

大型网站正在使用带有服务器集群、循环 DNS、负载均衡器的分布式 AS……

相关内容