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

我一直在试图弄清楚Java EE生产部署的世界正在发生什么,坦率地说,这似乎是相当可怕的。 在对一百多人讲话之后,这些是我的假设:

  1. 没有人在生产中使用重新部署(就像在服务器内更新的实际button中一样)。 由于OutOfMemoryError-s和其他故障,这只是不够可靠。
  2. 更新应用程序的常用方法是:
    1. 凌晨2点把所有的服务器关掉,希望没有人使用它。
    2. 一次取下服务器,升级它们,或者删除或迁移用户会话。
    3. 使用奇怪的黑客一次复制一个文件。

我还试图找出更新过程是如何发生的,它有多难,在人为测量(小时)和无灵魂的业务衡量(美元)方面花了多less钱。

我请你帮助我,并提供一些我可以用来更好地理解现实中发生的事情的半固态数据。 希望你会certificate我错了。 我期待着你的答案,但也会要求你回答这个调查,以获得一些数据:http: //0t.ee/appupdq11

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

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

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

在weblogic中,我使用wlst(python on java – jython)来进行部署。 你可以用它做任何你想要的逻辑。 所有部署的复杂部分是当你做一个数据库模式更新…这不是一个真正的Java问题,但它影响到Java系统。

对glassfish和tomcat更简单… tar目录安装一个新的实例与旧的configuration,然后部署战争,ear文件。

当然你可以把所有这些与cfengine,puppet或者fabric等configurationpipe理工具结合起来。