前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何平稳的迁移遗留系统

如何平稳的迁移遗留系统

作者头像
coderidea
发布2023-09-07 09:17:04
2110
发布2023-09-07 09:17:04
举报
文章被收录于专栏:coderidea

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

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

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

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

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

什么是绞杀者模式?

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

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

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

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

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

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

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

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

如何实施绞杀者模式?

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

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

绞杀者模式的优缺点

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

优点

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

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

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

缺点

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

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coderidea 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档