如何平稳的迁移遗留系统

2023-09-07 09:17:04 浏览数 (1)

X公司的Y软件被归类为遗留系统,这不同于Michael Feathers所说的“没有测试的系统即遗留系统”。Y软件的历史已经超过五年,最初的开发者也早已离职。

如今仍在维护这个系统的开发者精疲力尽。曾经的“先进”和“卓越”在时间的推移下逐渐消逝,就像一个年迈的长者,失去了曾有的活力和灵动。

每一次简单的业务调整都需付出巨大工作量,更可怕的是做了改动没人知道会不会导致别的功能崩溃,时间太久远了,没人能说明白整个系统的全景。

过去的技术创新已逐渐失去光芒,初始几年中,系统得以跟随技术栈的升级,甚至前沿技术的引入,比如早期采用的Java和Spring。然而,随着业务的积累日益复杂,一次事故的升级导致了技术栈的停滞,无法再次更新。

为了能适应业务需求,调整迫在眉睫,此时绞杀者应用模式该登场了。

什么是绞杀者模式?

绞杀者模式源于生物学中的澳大利亚绞杀藤的生长方式。这种藤蔓绕着树木生长,逐渐替代原有的树木,直到最后,原有的树木完全消失,只剩下藤蔓。在软件开发中,我们也可以用类似的方式来更新和替换旧的系统。

绞杀者模式是一种逐步替换老旧系统的方法,它通过在旧系统和新系统之间添加一个代理层来实现。当一个请求到达时,代理层会判断这个请求应该由新系统处理,还是应该由旧系统处理。随着新系统功能的逐步完善,越来越多的请求会被新系统处理,直到最后,新系统完全替代了老系统。

为什么要使用绞杀者模式?

使用绞杀者模式有以下几个主要的原因:

渐进式迁移:绞杀者模式允许我们逐步地迁移系统,而不是一次性地替换所有的功能。这样可以避免一次性投入过大的资源,同时也可以降低因为新系统出现问题而影响整个系统的风险。

降低风险:既然我们是逐步替换旧的系统,那么如果新系统的某个部分出现问题,我们可以迅速地切换回旧系统,保证服务的稳定。

提高系统性能:通过代理层,我们可以根据系统的负载情况,动态地调整新系统和旧系统的负载比例,从而提高系统的性能。

更快的响应业务需求:实现快速的发布变更,满足业务的需求变化。快速响应,实现业务目标。

如何实施绞杀者模式?

实施绞杀者模式主要包括以下步骤:

  1. 定义代理层:首先,我们需要定义一个代理层,这个代理层需要能够根据一定的规则,将请求分发到新系统或旧系统。也可以用不代理层,它的功能可以client端去实现,新功能,新需求用新的API,原有功能如果 有修改,在新系统去实现,替换成新的API。代理层也可以用网关层实现,用现有的网关层去路由处理,总之这个复杂性可以忽略的,看现有的架构去实现。
  2. 逐步迁移:然后,我们开始逐步地开发新系统,并将新系统的功能通过代理层暴露出来。当新系统的某个功能开发完成后,我们可以通过调整代理层的规则,将对应的请求转发到新系统。
  3. 完全迁移:当所有的功能都迁移到新系统后,我们就可以将旧系统完全关闭,此时,代理层也就不再需要了。

绞杀者模式的优缺点

正如任何设计模式一样,绞杀者模式也有其优缺点。

优点

渐进式迁移:绞杀者模式允许我们逐步地迁移系统,降低了一次性替换系统的风险。

降低风险:通过代理层,我们可以灵活地切换新系统和旧系统,从而降低系统出现问题的风险。

提高性能:通过动态调整新旧系统的负载,我们可以根据系统的负载情况提高系统性能。

缺点

增加了复杂性:绞杀者模式需要一个额外的代理层,这增加了系统的复杂性。代理层也可以不用,它的功能可以在client端去做,新功能,新需求用新的API,旧有功能有修改,在新系统去实现,替换成新的API。代理层也可以在网关层做处理,总之这个复杂性可以忽略的,看现有的架构去实现。

需要维护两个系统:在迁移过程中,我们需要同时维护新旧两个系统,这会增加维护的工作量。这点严格上不算缺点,新系统本身就是要替换老旧系统的,新需求变更主要集中在新系统上。

绞杀者模式是一种非常高效的系统迁移方案,它允许我们逐步地迁移旧系统,降低了一次性替换系统的风险,并且通过代理层,我们可以灵活地切换新旧系统并动态调整系统的负载,从而提高系统的性能。

然而,绞杀者模式并非银弹,它也带来了一些复杂性和维护上的挑战。因此,是否使用绞杀者模式,应该根据实际的项目需求和团队能力来决定。

总的来说,绞杀者模式是一个强大而灵活的工具,它能够帮助我们更好地处理淘汰老旧遗留系统的问题,提供更高效、更稳定的服务。尽管它可能增加了一些复杂性,但是如果正确使用,其好处可能会远远超过它的缺点。

无论你是正在寻找一种可以替换老旧系统的设计模式,还是只是想要了解更多的设计模式,我都希望这篇文章对你有所帮助。如果你有任何问题或者想要深入探讨这个话题,欢迎留言讨论。

0 人点赞