用途:在系统持续运行、不能停机的约束下,对遗留系统做增量迁移与现代化改造。核心思路是顺序优先于单项技术,每一步都为下一步创造安全条件。
主要能力与步骤:
- 改变前先特征化:编写固定当前行为(包括 bug)的测试,记录代码实际做什么而非应该做什么,使行为差异可见;断言看似错误时正是要写下它的地方。对复杂代码可用 golden-master 或 approval 测试(approvaltests、syrupy)快速获得覆盖,再用变异测试验证测试网是否真能拦住即将改动的分支。
- 插入接缝:用抽象分支,在待替换物上引入接口,让所有调用方经由它并暂时委派给旧代码;这是可单独发布验证的空操作改动。
- 在接缝后构建替代实现,默关闭或加开关,此时尚未承载流量。
- 用开关逐步切换流量:先内部用户,再按百分比,最后全量;每一步都可在开关时间内回滚。每次放量前以指标和阈值定义回滚触发条件(如错误率高于 0.5% 持续五分钟即退回上一比例)。
- 仅当新路径在生产中稳定运行足够久、覆盖月末任务、季节性高峰、年度报表等慢速场景后,才删除旧路径。
约定与限制:不做大爆炸式重写;每步都可发布、可回滚;涉及金额或状态计算时切换前先并行运行,比较输出并记录分歧;整体形状用绞杀者无花果模式,前置门面按功能路由新旧,逐条迁移直到旧系统无人访问。默认保留行为,包括 bug,修复应作为独立可见变更,绝不混入迁移。数据库迁移采用扩展—收缩:加新列、双写、回填、切换读取、再删旧列,各阶段可独立部署。新代码仍应满足当前标准。资料未提供具体安装命令、依赖或收费信息。