文章目录
- 遗留系统现代化的五种策略:重构还是重写?这是一个问题
- 遗留系统现代化的五种策略
- Encapsulate
- Replatform
- Rehost
- Refactor/Rearchitect
- Rebuild/Replace
- 其他策略
- 你应该选择什么样的策略?
- 小结
本文地址: 《遗留系统现代化》读书笔记(模式篇-开篇)
遗留系统现代化的五种策略:重构还是重写?这是一个问题
遗留系统现代化的五种策略
Encapsulate
第一种策略是 Encapsulate,也就是将遗留系统中的数据或者功能封装成 API,供外部调用。
哪些情况使用封装的策略:
- 遗留系统中还有一些功能十分重要,其他外部系统需要这些能力来构建业务。
- 当你有一个第三方系统,希望扩展它的功能,但只能访问它的数据库,却无法修改代码的时候。
- 封装的策略落到具体应用的时候,衍生出了很多相关模式,比如数据 API 模式、功能 API 模式等等。
Replatform
第二种策略是 Replatform,也就是替换运行时平台。这种策略不需要对代码大动干戈,只需要改动很小一部分。到了新的平台后,软件的功能和特性仍然保持不变。
Rehost
第三种策略是 Rehost,也就是将应用程序或组件部署到其他基础设施中,如虚拟主机、容器或云。这种迁移方法也有个很形象的别名,叫做“lift and shift”,就是原封不动地拎起来,转移到别的地方去。
Refactor/Rearchitect
第四种策略是 Refactor 和 Rearchitect,它们是指在不改变系统外部行为的前提下,对代码或架构进行调整、优化,以偿还拖欠已久的技术债务、改善非功能需求、提升系统健康度。
Refactor 主要是指代码级别的重构。
Rearchitect 是指架构级别的重构,它包含两层意思。第一层比较好理解,就是指从单体架构到分布式架构的这种架构调整。第二层是指不改变部署单元之间的关系,而是对单个或多个部署单元内部进行模块化或分层重构。由于这种模块化和分层也会涉及很多代码的调整,所以这种 Rearchitect 往往会和 Refactor 同时进行。
Rebuild/Replace
第五种策略是 Rebuild 和 Replace,都是指对遗留系统进行替换。它们两个替换的范围和程度不同。
Rebuild 可能是对应用程序的某个组件或某个服务的重新设计或重写,但会保留其原有的业务范围和业务规则。
而 Replace 是指彻底淘汰应用程序的所有组件,去构建或购买新的软件,同时会考虑添加新的业务需求或移除某些旧的业务需求。
其他策略
Retain,即保持系统当前的状态不做任何修改或更新。对于尚可满足使用的遗留系统来说,这无疑是风险和成本最低的策略。
Retire,就是评估完工作量、使用情况和业务价值之后,选择完全停止使用的一种策略。
你应该选择什么样的策略?
我们还是要依据目标和系统现状做判断。
对于业务敏捷来说,Replatform 和 Rehost 通过替换运行时环境和上云可以提升部署频率,特别是 Rehost 可以显著提升系统在遇到故障时的恢复时间;Refactor/Rearchitect 通过改善代码和架构的质量,可以缩短需求交付周期,减少线上问题数量;而 Rebuild/Replace 由于在某种程度上做了替换,也可以大幅度提升业务的响应力和交付质量。
对于运营效率来说,Refactor/Rearchitect 和 Rebuild/Replace 都可以提升价值流效率。而要想改善客户洞见,最有效的方式还是 Rebuild/Replace。在系统韧性与弹性方面,Rehost 显然是不二之选。
我们要结合当前遗留系统的现状和想要提升的目标,做综合判断,对于不同的模块,也可以选择不同的策略组合,来实现一个完整的业务目标。