高级持续交付实践指南
1. 处理非向后兼容的数据库变更
非向后兼容的数据库变更处理起来要困难得多。例如,如果数据库变更 v11 是非向后兼容的,那么将服务回滚到 1.2.7 版本就会变得不可能。为了实现回滚和零停机部署,我们可以将非向后兼容的变更转换为在一定时间内向后兼容的变更,具体做法是将模式迁移拆分为两个部分:
- 立即执行的向后兼容更新 :通常意味着保留一些冗余数据。
- 在回滚期之后执行的非向后兼容更新 :回滚期定义了我们可以将代码回退的范围。
1.1 删除列的示例
以删除列为例,具体步骤如下:
1. 停止在源代码中使用该列 (v1.2.5,向后兼容更新,首先执行)。
2. 从数据库中删除该列 (v11,非向后兼容更新,在回滚期之后执行)。
这样,直到数据库 v11 版本的所有服务版本都可以回滚到任何以前的版本,从服务 v1.2.8 开始的服务只能在回滚期内回滚。这种方法虽然看似只是延迟了列的删除,但解决了回滚和零停机部署的问题,降低了发布风险。
1.2 重命名列的示例
以计算器服务中重命名 result 列为 sum 为例,具体步骤如下:
1. 向数据库中添加新列 :创建 src/main/resources/db/migration/V3__Add_sum_column.sql
超级会员免费看
订阅专栏 解锁全文
1063

被折叠的 条评论
为什么被折叠?



