首页/开发/系统分析与架构设计速查/绞杀者模式(Strangler Fig)
架构风格与模式58 条

绞杀者模式(Strangler Fig)

在旧系统外围逐步长出新实现,通过路由把流量从旧系统分批迁移到新系统,旧部分随迁移完成逐步退役;适合无法停机重写的遗留系统改造。

绞杀者模式是什么

绞杀者模式在旧系统外围逐步长出新实现,通过网关、代理或功能开关把流量按业务功能或接口分批从旧系统迁移到新系统,迁移完成的部分让旧实现退役。它适合无法停机重写的遗留系统:新旧并行运行、逐步替换,每次迁移范围可控、可回退。名称来自榕树的绞杀生长方式,强调的是渐进覆盖而不是一次性替换。

基本信息

迁移单位按业务功能或接口逐个迁移,而非整体替换
路由层网关、代理或功能开关决定请求走新还是走旧
难点数据同步与双写、迁移期的一致性与回退
回退能力每个被迁移的功能都要能一键切回旧实现
对账手段新旧链路同时记录结果,按业务键比对差异

迁移阶段样例

阶段动作验收信号
分流准备少量流量按规则切到新实现新旧结果对账一致
比例扩大灰度比例提升到半数以上错误率与延迟达标
全量切换路由默认走新实现旧链路降为只读
退役停写旧库、下线旧模块回退窗口结束,数据归档完成

典型使用场景

  • 无法停机的核心系统:在运行中逐模块替换
  • 技术栈升级:新旧语言与框架并存,按接口迁移
  • 单体拆分:把待拆模块以新服务实现,旧单体逐步缩小
  • 供应商替换:以新实现覆盖旧接口,对上游保持契约不变
  • 高风险改造:先用小范围流量验证,再逐步扩大比例
  • 长期演进项目:迁移周期跨越多个版本,需要持续可回退
迁移入口最好统一收口在网关或路由层:散落在各处的开关会让流量走向难以判断,事故时无法快速回退。
新系统上线前必须准备好回退开关与数据对账,迁移期往往持续数月,期间任何一次数据分叉都可能难以修复。

易错点

  • 迁移期双写无补偿与对账,两侧数据分叉且长期无人发现
  • 缺少回退开关,新实现出问题时只能紧急回滚发布,恢复时间不可控
  • 路由规则散落在多处代码中,流量走向无从判断,排障效率极低
  • 旧系统长期不停写、新系统同时读取,边界模糊导致状态互相覆盖
  • 迁移范围一次过大,出现问题后无法定位是新实现还是路由配置导致

数据来源与参考

  • Martin Fowler bliki《StranglerFigApplication》(2004)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌