高级持续交付实践指南
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
超级会员免费看
订阅专栏 解锁全文
1086

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



