黄鑫ENGINEERING NOTE
系统迁移双写灰度

复杂系统迁移:双写、对账与灰度切换

一次低风险迁移通常不是一条脚本,而是一套可观察、可暂停、可回退的工程过程。

迁移真正困难的部分

系统迁移不只是把历史数据从 A 搬到 B。只要业务还在运行,就必须同时处理持续写入、模型差异、依赖方切换和异常恢复。

我通常拆成五个阶段

  1. 模型映射:明确字段转换、默认值和无法直接映射的数据;
  2. 存量回灌:任务支持分片、断点续传和幂等重试;
  3. 增量双写:让新数据同时进入两套系统,并持续对账;
  4. 灰度读流量:按业务维度逐步切换,保留快速回退开关;
  5. 观察与收口:确认差异、延迟和异常都处于可接受范围后再下线旧链路。

对账比迁移脚本更重要

对账需要覆盖数量、关键字段、关联关系和业务结果。只比较总行数通常不够,真正危险的是“数据存在但语义不一致”。

回退能力

迁移开始前就应该回答:如果某一步出现问题,能否停止、能否重放、能否切回旧系统。把回退当成方案的一部分,而不是事故发生后的临时操作。