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

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



