架构演进的方式

发布于:2024-10-17 ⋅ 阅读:(14) ⋅ 点赞:(0)

架构演进过程中,常用的三种模式是拆迁者模式绞杀者模式修缮者模式。它们代表了三种不同的演进路径,适用于不同的业务环境和技术场景。下面详细解释每种模式的内容、使用场景,并对比它们的差异。

1. 拆迁者模式

内容

拆迁者模式(也称为重建模式)是一种彻底重构现有系统的方式。通常,在这种模式下,原有系统被完全放弃,并用一个全新的系统替代。在这种情况下,架构和代码需要从头开始重新设计和实现。

使用场景
  • 系统老化严重:原有系统的架构已经过时,难以维护和扩展。例如,技术栈陈旧、性能瓶颈严重或安全问题频发。
  • 技术债务过高:代码质量差,维护成本高,技术债务积累太多,修复旧系统不如重新构建新系统更有成本效益。
  • 业务需求发生重大变化:业务模型已经发生根本性变化,现有系统无法满足新需求,必须设计一个全新的系统。
举例

一家银行的老旧核心业务系统使用的是上世纪90年代的COBOL语言,难以适应现代互联网时代的需求。新系统需求包括在线支付、实时交易分析等功能,老系统的架构已经不适合这些需求。在这种情况下,拆迁者模式可能是最佳选择,直接推倒老系统,重建一个现代化的系统。

优缺点
  • 优点:可以从技术和业务层面彻底解放旧系统的限制,使用最新的技术架构,打造全新的系统。
  • 缺点:风险大,开发周期长,成本高,整个业务需要中断或并行运行一段时间,可能会影响日常运营。

2. 绞杀者模式

内容

绞杀者模式(Strangler模式)是逐步替换系统的方式,逐步将旧系统的功能移植到新系统中,直到完全替代。名字来源于“绞杀榕树”的自然现象:新系统像绞杀榕树一样包围旧系统,慢慢将其取代。

使用场景
  • 系统规模较大:现有系统过于庞大,无法一次性全部替换,需要通过分步骤进行架构演进。
  • 不允许中断业务:业务连续性要求高,不能因为系统重构而暂停服务,需要旧系统和新系统并行运行,直到完全替换。
  • 逐步迁移:希望通过阶段性改进来降低重构风险和成本。
举例

一家电商平台希望逐步将老旧的单体架构转型为微服务架构,但由于业务压力大,不能一次性重建系统。电商平台可以采用绞杀者模式,首先把产品管理模块迁移到微服务架构上,而其他模块继续使用旧系统。当新的产品管理模块稳定后,再迁移其他模块,直到整个系统都转换为微服务。

优缺点
  • 优点:业务中断较少,降低了系统替换的风险。可以分阶段、逐步替换旧系统,灵活应对复杂的迁移需求。
  • 缺点:迁移过程较长,新旧系统并存一段时间,可能会增加管理和维护的复杂性。

3. 修缮者模式

内容

修缮者模式(Repair模式)是一种对现有系统进行局部修复和优化的方式。这种模式不涉及大规模的架构变更,而是通过修补现有系统的缺陷或进行性能优化来延长系统的使用寿命。

使用场景
  • 系统较为稳定:现有系统整体结构尚可,但局部存在性能瓶颈或代码质量问题,需要进行修复。
  • 预算或时间有限:没有足够的资源或时间进行彻底重构,或业务压力不允许进行大规模的架构变更。
  • 风险敏感:系统不可中断,或业务对风险承受度较低,因此只能进行小范围的修缮。
举例

一家中型企业的ERP系统运行多年,整体架构尚可,但随着用户量增加,系统在报告生成时性能逐渐下降。公司决定对特定模块进行修复和优化,比如对数据库查询进行优化、增加缓存机制等,而不对整体架构做大幅改动。

优缺点
  • 优点:改动小、风险低,可以在短时间内解决具体的性能问题或业务瓶颈,成本相对较低。
  • 缺点:只能解决局部问题,无法从根本上解决系统的潜在架构性缺陷,可能导致长期来看系统维护难度增大。

三种模式的对比

模式 方式 使用场景 优点 缺点
拆迁者模式 彻底重构系统 系统老化严重,无法维护,技术债务高 架构全新,能完全解决旧系统的局限 成本高,风险大,开发周期长,业务可能中断
绞杀者模式 逐步替换旧系统的部分功能 系统庞大,不能一次性重构,业务不能中断 风险小,业务不中断,灵活应对 迁移时间长,旧系统和新系统并存增加复杂性
修缮者模式 修复现有系统中的局部问题 系统整体稳定,局部有性能或功能问题 成本低,改动小,风险低 解决局部问题,无法从根本上改变系统缺陷

结论

在实际应用中,选择哪种模式要根据系统的现状、业务需求、风险承受能力以及资源状况来决定。

  • 如果现有系统已经严重老化、技术债务过高且难以维护,拆迁者模式可能是唯一的选择。
  • 如果系统复杂且业务不允许停机,逐步过渡的绞杀者模式是比较稳妥的方案。
  • 而对于希望快速解决局部性能或功能问题的场景,修缮者模式能够以较低成本实现局部优化。

根据具体的需求和系统状态,可能也会在实际中将不同模式结合使用,灵活调整。