微服务化改造
对单体架构现状的不满和难以控制是推动微服务化改造的重要因素,企业在向微服务架构转型的过程中面临诸多挑战,需要采用相应的策略模式进行微服务化改造。
技术债务
单体架构下技术债务的产生原因多种多样,总结下来这些技术债务大体可以分为业务复杂、交付质量低、非功能需求不达标等三大类。
● 业务复杂:开发人员依靠模块的叠加加速软件交付,后期形成规模庞大的单体架构,导致业务代码臃肿、业务逻辑耦合、无法复用等问题。
● 交付质量低:单体架构缺少自动化测试能力,存在局部代码质量问题,容易引发整个系统的可用性问题。
● 非功能需求不达标:代码的腐化和缺少维护、重构、改进导致性能逐渐下降等问题,在极端情况下,甚至出现不同资源竞争的短板效应,造成整个系统崩溃。
微服务化改造时机
对于存在技术债务的单体架构,在实施微服务化改造工作前,需要从客观和主观两个方面来判断当前时间点是否是进行微服务化改造的最佳时机。
所谓客观因素包括上一节所说的技术债务因素。此外,代码冲突频率、组织人员规模、产品迭代速速、用户规模量级等量化指标也可以作为微服务化改造的重要客观依据。
微服务化改造时机同样受到技术团队主体愿望和人员技术能力的制约,概括如下:
● 团队的技术选型需要达成一致,并在组织层面上有一致的指导和规范。
● 团队需要根据业务所处阶段、当前系统项目使用的技术栈和团队人员能力决定是否适宜转型微服务。
● 团队是否具备自动化交付和微服务治理平台等技术支撑能力。
单体架构的改造模式
单体架构进行微服务化改造需求遵循一定的改造模式。在不影响业务正常运行的前提下实现业务的平滑过渡,下面我们列举一些经常使用的微服务化改造模式。
绞杀者模式(Strangler Pattern)
绞杀者模式通过逐步替换而非一次性替换的方式来保证新旧系统的平滑过渡。运用一系列易于理解的小规模替换定期交付新的微服务,逐步淘汰遗留系统的功能模块,最终实现全部替换,流程如下图所示。
修缮者模式
修缮者模式源于古老的软件工程格言“任何问题都可以通过增加一个中间层解决”,就如修房或修路一样,将老旧待修缮的部分进行隔离,用新的方式对其进行单独修复。修复的同时,需保证与其他部分仍然能够协同完成工作。修缮者模式的基本原理来自Martin Fowler的重构方法,如下图所示。
这种模式的实现方式可以分成三个主要步骤。
● 抽象层提取:首先通过识别内部的待拆分功能,对其增加抽象接口层,同时对原有代码进行改造,确保其同样实现该抽象层,这样在依赖关系上就添加了一个中间层。
● 抽象层实现:为抽象层提供新的实现,新的实现采用微服务方式。
● 抽象层替换:采用新的实现对原有的各个抽象层实现进行逐步替换,直至原有实现被完全废弃,从而完成新老实现方式的替换。
演进式改造流程
演进式改造流程是一种以逐步演进的方式对遗留系统进行改造的流程,通过构建服务路标图、服务选择、服务改造、业务验证、迭代优化完成微服务化改造,如下图所示。
● 构建服务路标图:由架构师、业务分析师及技术负责人共同参与构造出一个服务路标图,并接受来自各个方面人员的反馈。
● 服务选择:有了服务路标图之后,遵循价值最大化的原则,从多种角度去制定优先拆分策略,优先拆分相对独立、容易实施的业务部分。
● 服务改造和业务验证:在改造过程中需要验证新的服务是否满足业务需求。在新服务上线投入使用并稳定后,可以从遗留系统中移除原有的代码模块。
边车(SideCar)模式
传统企业中存在大量的遗留系统,对这些遗留系进行微服务化改造的成本很高。对于这些系统,我们的选择并不一定是将其进行微服务化改造,而是将其接入微服务环境中,与其他服务共同协作来实现业务需求。边车模式可为不同语言的遗留系统提供一个同构的接入接口。对于原遗留系统应用程序的每个实例都部署和托管了一个边车实例,实现非侵入式接入。
本文给大家讲解的内容是微服务架构深度解析:微服务构建,微服务化改造
- 下篇文章给大家讲解的是微服务架构深度解析:微服务构建进阶,从更宏观的软件构建视角切入来总结微服务构建的最佳实践
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!