迁移策略怎么选
系统迁移的难点不在搬运数据,而在切换期间的业务连续性:写路径存在、数据在变,任何一次切换都会有窗口和差异。按约束选策略——停机迁移最简单但要求有维护窗口;双写加校验适合不能停机、能承受复杂度的场景;绞杀者式渐进替换适合长期演进。组合使用时必须明确阶段划分与回滚点。
基本信息
| 关键前提 | 数据一致性校验能力要先具备,再谈切流 |
|---|---|
| 回滚设计 | 每个阶段都要能退回上一状态,且回滚动作经过演练 |
| 灰度手段 | 按流量比例、按租户或按读写分离逐步切换 |
| 观测 | 切换期间对比两侧的成功率、延迟与数据差异 |
典型使用场景
- 数据库版本升级或换引擎:数据体量大、不能长时间停机
- 机房或云迁移:跨区域网络带宽与延迟受限,需要分批搬
- 单库拆分为分库分表:读写分离与双写过渡降低切换风险
- 遗留系统替换:用绞杀者模式把功能逐块迁出,避免一次性重写
- 第三方服务替换:旧供应商与新供应商并行一段时间做结果比对
策略
| 策略 | 适用条件 | 主要成本 |
|---|---|---|
| 停机迁移 | 数据量小、有维护窗口 | 业务中断 |
| 双写迁移 | 不能停机、可接受复杂度 | 一致性校验与清理 |
| 渐进替换 | 系统长期演进 | 两套并行期维护 |
阶段划分(双写示例)
阶段划分(双写示例)
阶段 1 双写,旧库为准读旧库,校验差异并修复
阶段 2 双写,抽样读新库比对结果一致率
阶段 3 双写,按比例把读流量切到新库(10%→50%→100%)
阶段 4 新库为准,旧库降为备用,保留回切开关
阶段 5 停止双写,清理旧路径与临时校验任务
# 每个阶段都要有明确的进入条件与回滚动作使用要点
- 把校验放前面:数据比对工具与差异处理流程先行,再谈切流
- 判断差异要能收敛:对持续存在的已知差异建立白名单,否则告警噪音淹没真实问题
- 回滚开关要有超时与有效期,避免长期挂着两套写入路径
- 迁移期间的监控口径要保持一致,两侧统计差异要能解释
- 并行期结束前明确旧路径下线日期与责任人,防止长期双份维护
迁移方案要把校验放前面:数据比对工具与差异处理流程先行,再谈切流,否则差异发现得越晚修复成本越高。
双写期间两套写入失败会形成不一致:必须定义“一边成功一边失败”的处理规则(重试、补偿还是阻断业务),否则数据差异会静默累积。