绞杀者模式是什么
绞杀者模式在旧系统外围逐步长出新实现,通过网关、代理或功能开关把流量按业务功能或接口分批从旧系统迁移到新系统,迁移完成的部分让旧实现退役。它适合无法停机重写的遗留系统:新旧并行运行、逐步替换,每次迁移范围可控、可回退。名称来自榕树的绞杀生长方式,强调的是渐进覆盖而不是一次性替换。
基本信息
| 迁移单位 | 按业务功能或接口逐个迁移,而非整体替换 |
|---|---|
| 路由层 | 网关、代理或功能开关决定请求走新还是走旧 |
| 难点 | 数据同步与双写、迁移期的一致性与回退 |
| 回退能力 | 每个被迁移的功能都要能一键切回旧实现 |
| 对账手段 | 新旧链路同时记录结果,按业务键比对差异 |
迁移阶段样例
| 阶段 | 动作 | 验收信号 |
|---|---|---|
| 分流准备 | 少量流量按规则切到新实现 | 新旧结果对账一致 |
| 比例扩大 | 灰度比例提升到半数以上 | 错误率与延迟达标 |
| 全量切换 | 路由默认走新实现 | 旧链路降为只读 |
| 退役 | 停写旧库、下线旧模块 | 回退窗口结束,数据归档完成 |
典型使用场景
- 无法停机的核心系统:在运行中逐模块替换
- 技术栈升级:新旧语言与框架并存,按接口迁移
- 单体拆分:把待拆模块以新服务实现,旧单体逐步缩小
- 供应商替换:以新实现覆盖旧接口,对上游保持契约不变
- 高风险改造:先用小范围流量验证,再逐步扩大比例
- 长期演进项目:迁移周期跨越多个版本,需要持续可回退
迁移入口最好统一收口在网关或路由层:散落在各处的开关会让流量走向难以判断,事故时无法快速回退。
新系统上线前必须准备好回退开关与数据对账,迁移期往往持续数月,期间任何一次数据分叉都可能难以修复。