【问题标题】:Achieving Zero Down Time During Code Deployment在代码部署期间实现零停机时间
【发布时间】:2013-05-12 15:36:36
【问题描述】:

需要在部署期间实现零停机时间。场景是我总共有 6 个生产箱,我的代码将在其中部署。第一个代码将部署在 3 个盒子中。此时,我将启动并运行我的旧代码和新代码。我在我的 DB 表中应用了一个加密逻辑,它只能由我的新代码处理。当用户访问我的旧代码库时,我的应用程序将失败。有哪些可能的解决方案。我的应用程序是 java 应用程序,我使用 oracle 10g。

【问题讨论】:

    标签: java oracle oracle10g


    【解决方案1】:

    解决方案是有一系列允许这样做的版本。假设代码在更新之前使用了一个名为 A 的纯文本列。

    • 将另一列 A_ENCRYPTED 添加到数据库中。旧代码仍然使用 A 并忽略 A_ENCRYPTED,所以一切都很好
    • 在三个盒子上发布第一次更新,这些盒子从 A 读取、写入 A,并加密值并将结果写入 A_ENCRYPTED。旧代码和新代码都从 A 读取和写入,所以一切都很好
    • 将此第一个更新发布到其他三个盒子。现在每个人都写信给 A 和 A_ENCRYPTED
    • 执行一个脚本,加密 A 中的所有内容并将结果存储在 A_ENCRYPTED 中。现在 A 和 A_ENCRYPTED 对于所有行都是一致的,并且由于所有框都写入两列而继续保持一致。
    • 现在发布对三个框的第二次更新,这些框从 A_ENCRYPTED 读取,仍然写入 A 和 A_ENCRYPTED。其他 3 个框仍然可以正常工作,因为 A 始终与 A_ENCRYPTED 保持一致。
    • 在其他 3 个盒子上执行相同的释放。现在所有的盒子都从/向 A_ENCRYPTED 读写。
    • 现在对 3 个仅从 A_ENCRYPTED 读写的框发布第三次更新
    • 在其他 3 个盒子上执行相同的释放。现在没有人再使用 A 列了。
    • 执行删除列 A 的脚本。

    【讨论】:

      【解决方案2】:

      故障状态是旧代码+新数据,所以过渡阶段需要是新代码+旧数据。您的新代码需要能够区分新旧数据并同时使用两者。然后,一旦所有旧代码都消失了,您就可以转换到新的数据格式。

      1. 旧代码+旧数据
      2. 新代码+旧数据
      3. 新代码+新数据

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        • 1970-01-01
        • 1970-01-01
        • 2022-06-24
        • 2019-11-22
        • 2017-12-18
        相关资源
        最近更新 更多