technology · L · P1 · active

绞杀者渐进式替换

Strangler Fig Progressive Replacement
P1高级verified技术实践 technology技术L · 演化与弃用技术债GL-TECHNOLOGY · 技术实践层

§1摘要与结论

TL;DR · 一句话结论

在遗留系统之上或之旁增量构建新实现,通过可切换的接缝与路由逐步把功能与数据迁移过去,逐步替代旧系统,而非一次性整机重写。

别名:strangler fig、strangler fig application、绞杀者模式、绞杀者无花果、渐进式替换 | 英文:Strangler Fig Progressive Replacement | 类型:技术 / pattern

§2局部关系图

绞杀者渐进式替换 的 1-2 跳邻域关系图前置依赖(prerequisite):持续演化推动复杂度与变更成本上升依据推导(derives_from):演进式架构以演化不可逆为前提依据推导(derives_from):遗留治理以降低变更成本为目标依据推导(derives_from):弃用策略是演化不可逆下的有序退场依赖关联(dependency):债务偿还依靠行为保持重构前置依赖(prerequisite):改动遗留代码前先建立行为安全网细化(refines):适应度函数是演进式架构的强制机制前置依赖(prerequisite):遗留治理与弃用共享迁移路径设计依赖关联(dependency):债务治理与演进式架构协同依据推导(derives_from):演进式架构承接软件必须持续演化的定律案例印证(case_instance):印证:以可执行门控持续评估知识库架构完整性案例印证(case_instance):印证:把架构约束转写为自动执行、可量化判定的校验组合(combination):渐进收紧以级联适应度函数在流水线中先告警后报错实现(implements):依赖结构度量与阈值收紧是架构适应度函数的代码层落地实现(implements):适应度函数工具化实现架构适应度函数方法论实现(implements):工具化持续校验支撑演进式架构的增量变更原则实现(implements):绞杀者渐进替换实现遗留系统渐进治理方法论实现(implements):绞杀者增量迁移体现有引导的增量演进组合(combination):适应度校验与绞杀者迁移组合保护遗留系统演进案例印证(case_instance):印证:多层门控链持续校验交付物完整性案例印证(case_instance):印证:门控做无环断链覆盖一致校验,防漂移绞杀者渐进式替换绞杀者渐进式替换(TEC-L-02)演进式架构演进式架构(MTH-L-04)遗留系统渐进治理遗留系统渐进治理(MTH-L-06)架构适应度函数工具化架构适应度函数工具化(TEC-L-01)行为保持重构行为保持重构(MTH-L-01)架构适应度函数架构适应度函数(MTH-L-05)插件 DAG RC5→R…插件 DAG RC5→RC7 升级(CAS-X-06)Open Code Re…Open Code Review 图谱(CAS-X-15)AI Agent 架构 …AI Agent 架构 DAG 复盘(CAS-X-18)变更成本随复杂度增长变更成本随复杂度增长(ESS-L-05)技术债象限与偿还策略技术债象限与偿还策略(MTH-L-03)软件演化定律软件演化定律(ESS-L-01)演化的不可逆性演化的不可逆性(ESS-L-04)依赖结构度量与渐进收紧治…依赖结构度量与渐进收紧治理(TEC-H-04)弃用与日落策略弃用与日落策略(MTH-L-07)
前置依赖实现依据推导案例印证对比冲突
以本节点为中心,静态内联 1–2 跳邻域:内环 3 个直接邻接、外环 11 个二跳节点,共 15 个节点;连线按边类型着色(六类配色见下)。构建期计算,无运行期脚本。

§3原理 · 为什么

面对难以理解的遗留系统,整机重写看似干净,实则耗时、细节难摸清且常把无用行为一并重建,失败率高。绞杀者方法承认对旧系统的认知有限,主张让新系统在旧系统旁生长:先建立可安全改动的接缝,把一小块行为迁到新实现,验证后再迁下一块,直至旧系统不再被调用而自然退场。其价值在于把高风险的大爆炸替换拆成一系列可验证的小步,使风险与认知负担分摊到整个迁移周期,而不是压在最后一次上线。它同时让业务价值尽早兑现:每一步都能交付可用功能,而非等到全部重写完成才见效。这种「先长后杀」的节奏也降低了组织在长周期项目中的信心风险。它把「现代化」从一次性工程变成可随时暂停、调整甚至放弃的持续过程,从而降低不可逆决策的风险,让团队能在获得反馈后修正方向。

§4机制 · 如何运作

实现依赖三个要素:其一是接缝与路由层,在调用方向上插入可切换的入口,使请求能被导向旧实现或新实现;其二是行为安全网,用特征测试固定旧系统的既有行为,使迁移后能判定行为是否变化;其三是增量交付,按功能或数据边界逐块迁移,每块独立上线并保留回退能力。随着新实现覆盖扩大,路由逐步倒向新系统,旧部分被「绞杀」。四类活动贯穿全程:理解期望结果、把问题拆小、成功交付各部分、改造组织以支持持续进行,使迁移从一次技术任务扩展为可持续的组织能力。三要素缺一不可:没有接缝就无法安全切换,没有行为网就无法判定回归,没有增量交付就无法持续兑现价值。路由层是切换的中枢,其设计质量直接决定迁移能否平滑进行以及出问题时能否快速回退,因此它是整个模式的工程重心。

§5工程 · 怎么落地

落地时先识别可独立迁移的功能边界与数据边界,避免跨边界强耦合。为旧系统补特征测试,把需要保持的行为固化为可执行判据,作为变更安全网。在入口处引入路由或适配层,支持按流量、用户或功能开关切换,并保留快速回退路径。迁移过程中允许新旧实现在一段时间内共存,认真处理数据双写、同步与回滚问题。把迁移拆成可交付的小步并纳入常规发布节奏,同时调整团队职责与协作方式,使持续迁移获得组织支撑,而非沦为一次性专项。每次迁移都应定义可验证的验收判据与退出条件,并在旧路径真正无人使用后再拆除。迁移不是一次性的技术练习,而应被视为持续的可运营过程,直到旧系统被确认可以退役。整个过程应留有观测手段,能看清流量正流向哪一侧,作为继续、暂停或回退迁移的判断依据,而不是凭感觉推进。把回退路径与切换开关预先演练,能在真实故障时避免临场慌乱,也使迁移团队对边界与依赖有更清晰的掌握。

§6权衡卡

代价 · 风险

绞杀者迁移周期较长,期间需同时维护新旧两套实现,存在数据一致性与接口适配的持续成本。

因此应权衡迁移速度与共存成本,谨慎划定边界,并把组织配套视为方法成功的必要条件。

最稳妥的策略往往是先迁移风险低、边界清晰的模块,用成功经验逐步建立对新架构与团队的信心,再处理核心难点。

迁移的节奏还应与业务路线图协调,避免在关键交付期引入两套系统并行的高风险变更;当旧系统确实无法被安全绞杀时,也应允许方案调整,而非为了完成迁移而迁移。

反例 · 误区

反例之一是 big-bang 整机重写,看似简单却常在细节淹没中失败;反例之二是把绞杀者误解为「无接缝、无安全网的增量重写」,最后留下更难维护的中间态;反例之三是无迁移边界的持续推进,使新旧系统长期纠缠、无法收敛。

原文要点
  • 特征测试只固定行为、不判对错,可能把既有缺陷一并冻结。
  • 接缝与路由层本身会增加复杂度和潜在性能开销。
  • 若组织缺乏持续投入的意愿,或边界划分不当,迁移可能半途而废。
  • 关键在于让每一步都可验证、可回退,而不是追求最快完成。
  • 耐心与纪律,是渐进替换能否走到底的关键。

权衡原文仅按显式标记词归栏引用(收益 / 代价 / 反例),其余句子按原序列为「原文要点」;内容逐字引用未改写。

§7案例带

CAS-X-04 · 2 跳派生:当前节点 → MTH-L-06 → MTH-L-01

网申 v2 深度重构

一次由「改一处漏多处」症状触发的深度重构:定位到接口定义散落 12 个文件、存在 7 种接口形态的根因后,以单一契约源、dispatch 消息表与能力注册中心重建三层契约系统,恢复可审计与可校验性。

CAS-X-06 · 2 跳派生:当前节点 → MTH-L-04 → MTH-L-05

插件 DAG RC5→RC7 升级

一次知识库随上游源码版本升级的级联维护:以三层差异分析把 219 个包收敛为 26 个实质变更包,经编译、运行时、组合三类依赖判定更新 DAG 数据后全量重生成页面,并以静态门控加渲染验证收口。

CAS-X-07 · 2 跳派生:当前节点 → MTH-L-04 → MTH-L-05

插件 DAG 两次级联升级

在同一知识库上继续两轮上游级联升级:处理数百次提交与包的增删,暴露「依赖声明不等于运行时引用」、分层须按最长路径深度、纯外部依赖边不得入主图等差分陷阱,并以全量门控校验收口。

CAS-X-15 · 经 TEC-L-01

Open Code Review 图谱

对阿里开源 AI 代码审查 CLI 做源码级解析并构建「知识 + 实践资产 + AI 索引」三合一知识图谱的工程案例。

CAS-X-18 · 经 TEC-L-01

AI Agent 架构 DAG 复盘

对四个工作日内独立完成三个异构对象 DAG 分析的方法论复盘,总结「采集→建模→生成→门控→交付」可复用管线与关键教训。

§8信源与核验

核验状态True(verified)
置信度high
复核日期2026-10-12
生命周期active
版本2024-08
规范信源WEB-016、BK-022、WEB-041
书证核验BK-022 ChFaking Collaborators(direct),ChHow Do I Add a Feature?(direct),ChSeam Types(direct),ChSprout Method(direct),ChWrap Method(direct)
勘误
常见误解:绞杀者就是重写,只是换成增量方式
核验结论:绞杀者以既有行为安全网与可切换接缝为前提,在旧系统旁生长并逐步接管,强调保留可回退能力;缺乏接缝与行为保护的盲目增量重写不属该方法 [WEB-016]

§9原始关系清单

展开:本节点的全部原始关系边(3 条,含边 ID 与方向)
关系方向对端节点说明
组合← TEC-L-01架构适应度函数工具化
E-911
适应度校验与绞杀者迁移组合保护遗留系统演进
实现→ MTH-L-04演进式架构
E-904
绞杀者增量迁移体现有引导的增量演进
实现→ MTH-L-06遗留系统渐进治理
E-903
绞杀者渐进替换实现遗留系统渐进治理方法论