绞杀者渐进式替换
§1摘要与结论
别名:strangler fig、strangler fig application、绞杀者模式、绞杀者无花果、渐进式替换 | 英文:Strangler Fig Progressive Replacement | 类型:技术 / pattern
§2局部关系图
§3原理 · 为什么
面对难以理解的遗留系统,整机重写看似干净,实则耗时、细节难摸清且常把无用行为一并重建,失败率高。绞杀者方法承认对旧系统的认知有限,主张让新系统在旧系统旁生长:先建立可安全改动的接缝,把一小块行为迁到新实现,验证后再迁下一块,直至旧系统不再被调用而自然退场。其价值在于把高风险的大爆炸替换拆成一系列可验证的小步,使风险与认知负担分摊到整个迁移周期,而不是压在最后一次上线。它同时让业务价值尽早兑现:每一步都能交付可用功能,而非等到全部重写完成才见效。这种「先长后杀」的节奏也降低了组织在长周期项目中的信心风险。它把「现代化」从一次性工程变成可随时暂停、调整甚至放弃的持续过程,从而降低不可逆决策的风险,让团队能在获得反馈后修正方向。
§4机制 · 如何运作
实现依赖三个要素:其一是接缝与路由层,在调用方向上插入可切换的入口,使请求能被导向旧实现或新实现;其二是行为安全网,用特征测试固定旧系统的既有行为,使迁移后能判定行为是否变化;其三是增量交付,按功能或数据边界逐块迁移,每块独立上线并保留回退能力。随着新实现覆盖扩大,路由逐步倒向新系统,旧部分被「绞杀」。四类活动贯穿全程:理解期望结果、把问题拆小、成功交付各部分、改造组织以支持持续进行,使迁移从一次技术任务扩展为可持续的组织能力。三要素缺一不可:没有接缝就无法安全切换,没有行为网就无法判定回归,没有增量交付就无法持续兑现价值。路由层是切换的中枢,其设计质量直接决定迁移能否平滑进行以及出问题时能否快速回退,因此它是整个模式的工程重心。
§5工程 · 怎么落地
落地时先识别可独立迁移的功能边界与数据边界,避免跨边界强耦合。为旧系统补特征测试,把需要保持的行为固化为可执行判据,作为变更安全网。在入口处引入路由或适配层,支持按流量、用户或功能开关切换,并保留快速回退路径。迁移过程中允许新旧实现在一段时间内共存,认真处理数据双写、同步与回滚问题。把迁移拆成可交付的小步并纳入常规发布节奏,同时调整团队职责与协作方式,使持续迁移获得组织支撑,而非沦为一次性专项。每次迁移都应定义可验证的验收判据与退出条件,并在旧路径真正无人使用后再拆除。迁移不是一次性的技术练习,而应被视为持续的可运营过程,直到旧系统被确认可以退役。整个过程应留有观测手段,能看清流量正流向哪一侧,作为继续、暂停或回退迁移的判断依据,而不是凭感觉推进。把回退路径与切换开关预先演练,能在真实故障时避免临场慌乱,也使迁移团队对边界与依赖有更清晰的掌握。
§6权衡卡
反例之一是 big-bang 整机重写,看似简单却常在细节淹没中失败;反例之二是把绞杀者误解为「无接缝、无安全网的增量重写」,最后留下更难维护的中间态;反例之三是无迁移边界的持续推进,使新旧系统长期纠缠、无法收敛。
- 特征测试只固定行为、不判对错,可能把既有缺陷一并冻结。
- 接缝与路由层本身会增加复杂度和潜在性能开销。
- 若组织缺乏持续投入的意愿,或边界划分不当,迁移可能半途而废。
- 关键在于让每一步都可验证、可回退,而不是追求最快完成。
- 耐心与纪律,是渐进替换能否走到底的关键。
权衡原文仅按显式标记词归栏引用(收益 / 代价 / 反例),其余句子按原序列为「原文要点」;内容逐字引用未改写。
§7案例带
网申 v2 深度重构
一次由「改一处漏多处」症状触发的深度重构:定位到接口定义散落 12 个文件、存在 7 种接口形态的根因后,以单一契约源、dispatch 消息表与能力注册中心重建三层契约系统,恢复可审计与可校验性。
插件 DAG RC5→RC7 升级
一次知识库随上游源码版本升级的级联维护:以三层差异分析把 219 个包收敛为 26 个实质变更包,经编译、运行时、组合三类依赖判定更新 DAG 数据后全量重生成页面,并以静态门控加渲染验证收口。
插件 DAG 两次级联升级
在同一知识库上继续两轮上游级联升级:处理数百次提交与包的增删,暴露「依赖声明不等于运行时引用」、分层须按最长路径深度、纯外部依赖边不得入主图等差分陷阱,并以全量门控校验收口。
Open Code Review 图谱
对阿里开源 AI 代码审查 CLI 做源码级解析并构建「知识 + 实践资产 + AI 索引」三合一知识图谱的工程案例。
AI Agent 架构 DAG 复盘
对四个工作日内独立完成三个异构对象 DAG 分析的方法论复盘,总结「采集→建模→生成→门控→交付」可复用管线与关键教训。
§8信源与核验
核验结论:绞杀者以既有行为安全网与可切换接缝为前提,在旧系统旁生长并逐步接管,强调保留可回退能力;缺乏接缝与行为保护的盲目增量重写不属该方法 [WEB-016]
§9原始关系清单
展开:本节点的全部原始关系边(3 条,含边 ID 与方向)
| 关系 | 方向 | 对端节点 | 说明 |
|---|---|---|---|
| 组合 | ← TEC-L-01 | 架构适应度函数工具化 E-911 | 适应度校验与绞杀者迁移组合保护遗留系统演进 |
| 实现 | → MTH-L-04 | 演进式架构 E-904 | 绞杀者增量迁移体现有引导的增量演进 |
| 实现 | → MTH-L-06 | 遗留系统渐进治理 E-903 | 绞杀者渐进替换实现遗留系统渐进治理方法论 |