我们基本上拥有基于J2EE的应用程序它是跨全球(多个时区)运行的小型电子商务应用程序。当我们必须部署补丁时,需要大约3小时的时间(数据库备份,数据库更改,Java更改,QA烟雾测试)。我知道它太高了。我想把这个部署时间减少到不到30分钟。
现在我简要介绍一下应用程序的基础知识:我们有两个Jboss服务器和单个DB,为两个jboss服务器配置了负载均衡器。它不是集群环境。
目前我们做什么:
我们打倒了jboss和DB
进行数据库备份
进行数据库更改,运行一些脚本
进行java更改,运行补丁
以上步骤大约需要2小时
比QA将进行一小时的测试。而不是打开服务器。
您能否提出一些更好的方法来实现这一目标?我的主要问题,当我们有多个jboss和单个DB时。如何使部署流畅
答案 0 :(得分:0)
我听说Netflix使用的一种方法,但没有机会使用自己:
使所有数据库架构更改都向前和向后兼容当前运行的软件版本以及即将部署的软件。使新软件版本继续写入旧版本所需的任何数据。希望这是一个最小的设置。
备份正在运行的数据库(大多数数据库不需要停机备份),并在软件部署前至少一周部署数据库架构更新。
一旦您的数据库更改已烧毁并且当前正在运行的版本似乎没有错误,请将您的负载均衡器重新配置为仅指向一个JBoss服务器实例。将更新的软件部署到另一个实例,并让QA对其进行脱机测试,而另一个服务器继续服务器生产请求。
当QA对结果感到满意时,将LB指向离线JBoss服务器(使用新软件)。当它联机时,更新新离线JBoss服务器上的软件,并根据需要进行QA烟雾测试。如果成功,请将LB指向两个JBoss实例。
如果QA发现重大错误,并且无法快速修复错误并且无法“前滚”,请回滚到已部署软件的先前版本。由于您的架构和新代码是向后兼容的,因此您不会丢失数据。
在下次部署时,以一种使其仍然向后和向前兼容的方式从模式中删除任何垃圾(如当前部署未使用的列)。
虽然比目前的方法更复杂,但这种方法应该以最小的风险减少部署停机时间。