如何在生产中更新 Java EE 应用程序?

如何在生产中更新 Java EE 应用程序?

我一直在试图弄清楚 Java EE 生产部署领域正在发生什么,坦率地说,这看起来相当可怕。在与 100 多人交谈后,我得出以下假设:

  1. 没有人在生产中使用重新部署(如在服务器内进行更新的实际按钮)。由于 OutOfMemoryError-s 和其他故障,它不够可靠。
  2. 更新应用程序的常用方法是:
    1. 在凌晨 2 点关闭所有服务器并希望无人使用它。
    2. 每次关闭一个服务器,然后对其进行升级,最后删除或迁移用户会话。
    3. 使用奇怪的技巧,例如一次复制一个文件。

我还试图了解更新过程是如何发生的、有多难以及在人力衡量标准(小时)和无灵魂的商业衡量标准(美元)上需要花费多少钱。

我请求您帮助我,为我提供一些半可靠的数据,以便我更好地了解现实情况。希望您能证明我错了。我期待您的回答,但也希望您回答此调查以获取一些数据:http://0t.ee/appupdq11

我知道这不是典型的 ServerFault 问题,因为这里没有正确答案,但是通过填写调查问卷,您将对我有很大帮助,如果您在这里提供更长的答案,那就太棒了。

答案1

很大程度上取决于应用程序。

大多数 J2EE 应用程序都在服务器集群农场上运行,在这些农场中,基本的应用程序升级可以通过滚动升级来完成。即从负载平衡农场中取出一台服务器,等待其工作完成,更新 EAR 部署,测试它,将其放回负载平衡农场,取出下一台并重复。您可能需要停机才能进行数据库架构升级,只是为了确保数据的一致性。数据库软件升级通常可以在没有重大停机的情况下完成,Oracle 就是一个很好的例子。

答案2

在 weblogic 中我使用 wlst(java 上的 python - jython)进行部署。你可以用它制作任何你想要的逻辑。所有部署的复杂部分是当你执行数据库模式更新时......这实际上不是一个 java 问题但它会影响 java 系统。

在glassfish和tomcat上更简单... tar目录使用旧配置安装一个新实例,然后部署war,ear文件。

当然,你可以将所有这些与配置管理工具(如cfengine,puppet甚至fabric)结合起来。

相关内容