首页/开发/系统分析与架构设计速查/扩展-收缩(并行变更)
架构风格与模式58 条

扩展-收缩(并行变更)

兼容性变更的标准手法:先扩展(新增字段/接口并双写、回填历史数据),迁移消费方后再收缩(删除旧结构);数据库与接口演进都适用。

  • 扩展:新增结构,旧结构继续可用,写入同时更新两处
  • 迁移:读路径切换到新结构,校验一致性
  • 收缩:确认无依赖后删除旧结构与兼容代码

数据库列改名示例

阶段操作兼容性要求
扩展新增 new_col 并双写,读兼容新旧两列旧代码不改动照常运行
迁移回填历史数据,读切到 new_col 并抽样校验旧列保持可读,随时可回退
收缩停止写旧列,确认无读取方后删除先核对依赖方调用量清零
回退要点每个阶段独立可回退;双写与回填期间监控延迟与数据差异
完成判据旧结构零读取、零写入,持续观察一个发布周期后再删除
接口侧字段先加后删、枚举先扩后收,消费方对未知字段保持容忍
清理登记旧结构的删除时间与责任人登记,到期前复核存量依赖
每个阶段都要可独立回退;回填与双写期间要监控延迟与数据差异。

易错点

  • 未确认真实依赖就删除旧字段,遗留调用方直接报错
  • 双写阶段缺少一致性校验,数据偏差在收缩后才暴露

数据来源与参考

  • Martin Fowler bliki《ParallelChange》(2014)
  • Sam Newman《Monolith to Microservices》相关章节
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌