【问题标题】:Deployment approach to bring down time for Java用于减少 Java 停机时间的部署方法
【发布时间】:2013-06-23 17:53:34
【问题描述】:

我们基本上拥有基于 J2EE 的应用程序。它是跨全球(多个时区)运行的小型电子商务应用程序。每当我们必须部署补丁时,大约需要 3 个小时(数据库备份、数据库更改、Java 更改、QA 冒烟测试)。我知道它太高了。我想将此部署时间缩短到 30 分钟以内。 现在我将简要介绍一下应用程序基础设施:我们有两个 Jboss 服务器和单个 DB,为两个 jboss 服务器配置了负载平衡器。它不是集群环境。 目前我们在做什么: 我们同时关闭了 jboss 和 DB
进行数据库备份 进行数据库更改,运行一些脚本 进行java更改,运行补丁 以上步骤对我们来说大约需要 2 小时 比 QA 会做一小时的测试。而不是启动服务器。

您能否提出一些更好的方法来实现这一目标?我的主要问题是,当我们有多个 jboss 和单个 DB 时。如何让部署顺利

【问题讨论】:

    标签: deployment time


    【解决方案1】:

    我听说 Netflix 使用的一种方法,但我自己没有机会使用:

    1. 使您的所有数据库架构更改都向前和向后兼容当前运行的软件版本以及您将要部署的软件。使新软件版本继续写入旧版本需要的任何数据。希望这是一个最小的集合。

    2. 备份您正在运行的数据库(大多数数据库不需要停机进行备份),并至少在您的软件部署前一周部署您的数据库架构更新。

    3. 一旦您的 db 更改已经生效并且当前运行的版本似乎没有错误,请重新配置您的负载平衡器以仅指向您的 JBoss 服务器的一个实例。将更新后的软件部署到另一个实例,并让 QA 对其进行脱机冒烟测试,同时另一个服务器继续处理生产请求。

    4. 当 QA 对结果感到满意时,将 LB 指向离线 JBoss 服务器(使用新软件)。当它上线时,在新离线的 JBoss 服务器上更新软件,如果需要,可以进行 QA 冒烟测试。如果成功,将 LB 指向两个 JBoss 实例。

    5. 如果 QA 发现重大错误,并且无法快速修复错误和“前滚”,请回滚到已部署软件的先前版本。由于您的架构和新代码向后兼容,因此您不会丢失数据。

    6. 在下一次部署时,从架构中删除所有垃圾(如当前部署未使用的列),使其仍然向后和向前兼容。

    虽然比您当前的方法更复杂,但这种方法应该可以以最小的风险减少您的部署停机时间。

    【讨论】:

    • 非常感谢...明白了,对我有意义。我刚刚还有两个问题 1. 当我们对正在运行的数据库进行备份时,我们可能会丢失一些在备份进行时插入的数据? 2.当我们从LB关闭Jboss时,通过这个Jboss IP登录的用户。他们可能会失去会话。如何处理?
    • #1 - 如果您必须从备份中恢复,您将遭受数据丢失。确保在生产部署之前使用类似生产的环境对所有内容进行良好测试,以降低需要备份的风险。您必须评估发生这种情况的机会和成本,以及您的客户正在经历的偶尔的长时间停电。 #2 - 不确定 JBoss 中的 servlet 容器使用什么,但如果是 Tomcat,则可以跨两个节点启用状态复制。这会将会话信息复制到所有节点,因此当一个节点出现故障时用户不会注销。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2018-05-04
    • 2020-12-04
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多