Page 61 - 《软件学报》2021年第5期
P. 61

李杉杉  等:一种优化的数据流驱动的微服务化拆分方法                                                      1285


                 microservices using a more flexible two-phase clustering algorithm. A prototype tool is also implemented to automatically support the
                 whole process of the data collection, the decomposition, and even the evaluation of microservice candidates using some typical metrics.
                 The results of  a  case study demonstrate the  effectiveness,  efficiency,  and flexibility of the proposed  DFD-A  method for
                 microservices-oriented decomposition and evaluation.
                 Key words:    microservice; DevOps; scalability; decomposition; evaluation; data flow

                    微服务架构(microservices architecture,简称 MSA)是近年来软件工程领域中的一个热门话题.作为面向服
                 务架构(service-oriented architecture,简称 SOA)之后的分布式系统解决方案,该架构风格提倡将系统拆分为细粒
                                                                        [1]
                 度的服务,通过轻量级的通信机制比如 RESTFul API 等进行协同工作 .微服务架构中,业务服务因拆分而变得
                 独立,且可以带来诸多好处,帮助解决单体架构或面向服务架构中的一系列问题.具体来讲,小而自治的微服务
                 通常承担“单一职责”,且可以运行在单独的进程中,具备可独立开发部署的特性,以较好地支持 DevOps 和持续
                 交付实践;拆分后的微服务可进行独立伸缩和功能扩展;技术异构,微服务的开发团队可根据其以往经验或微服
                 务功能特点选择不同的技术栈进行开发.这些特点和好处驱动企业纷纷采用微服务架构来开发新系统或从单
                 体架构向微服务架构迁移,其中比较典型的是 Netflix、Amazon 以及 eBay 等世界领先的互联网公司.
                    尽管微服务架构解决了传统单体架构以及面向服务架构设计中存在的诸多问题,使得架构设计能够更快
                 地对业务的变化做出响应,IT 能力能够更好地满足业务发展的需求等等.然而,这些益处的先决条件是合适粒度
                 的微服务化拆分,一旦所设计的微服务粒度不合适,会给系统带来很多负面影响,比如性能和可维护性等.我们
                          [2]
                 的调研发现 ,微服务化拆分是该领域中最为关键的挑战之一.企业在现阶段的实践中仍旧主要依赖架构师或
                 者项目管理者的个人经验,然而当面临复杂的系统时,这种方法低效且无法保证实践者期望快速享受微服务架
                 构诸多好处的需求.反观学术领域,现有的拆分方法研究中,一部分需要手动构建满足拆分方法需求的数据信息
                 或人工干预分析以供决策,同样面临效率低下的问题;另一部分自动化或半自动化的方法在一定程度上可以帮
                                                                [3]
                 助解决效率的问题,但除了数据流驱动的微服务化拆分方法 ,其他相关工作均未真正地实现微服务架构倡导
                 的 Database per Service 原则,即每个服务拥有自己的数据库.此外,在设计阶段,大多依靠架构师来主观判断所拆
                 分出的候选微服务是否合适,缺乏系统化的指标体系来帮助快速实现候选微服务的合理性评估,从而帮助降低
                 因评估不当或滞后至代码实现阶段而带来的系统重构代价.
                    为了应对上述挑战,探索和研究更加客观、高效且合理的微服务化拆分方法,对于期望使用微服务架构的
                 实践者而言是至关重要的.本文旨在在现有的拆分方法基础上,研究一种更加高效的微服务化拆分方法 DFD-A.
                 具体来讲,针对已有的数据流驱动的微服务化拆分方法的瓶颈问题进行优化改进,使用动静态分析技术相结合
                 的方式改进其数据流信息收集、分析和构建流程,同时实现了两阶段的聚类算法来优化其基于自定义规则的微
                 服务化拆分算法,最终实现原型工具来支持从数据收集分析、服务拆分到候选微服务评估的整个全自动过程,
                 在保证所拆分微服务合理性的基础上,大幅度提升微服务化拆分的效率和灵活性.
                    作为面向软件过程中设计阶段的应用方法,本文的贡献点在于:所提出的微服务化拆分优化方法和原型工
                 具可以帮助企业以及其他组织在进行微服务架构设计过程中,做出更加合理和客观的微服务化拆分决策,降低
                 微服务化拆分设计过程的复杂度,帮助软件架构师以及项目管理者等更好地实践微服务架构设计.
                    本文第 1 节介绍背景及相关工作,尤其是本文所优化的数据流驱动的微服务化拆分方法的基本原理及缺
                 陷问题.第 2 节阐述本文所提出的数据驱动的微服务化拆分优化方法 DFD-A,包括优化思路、整体流程和基于
                 方法所实现的原型工具.第 3 节通过案例研究,验证并评估本文提出的方法对于优化目标的实现效果.第 4 节讨
                 论本文的贡献点和不足之处.第 5 节总结本文工作,并给出针对不足之处的下一步工作展望.

                 1    背景及相关工作介绍

                    微服务架构目前受到了企业界和学术界的广泛关注,其在实践中主要有两种类型,即新的微服务系统设计
                 和遗留系统通过重构向微服务架构迁移,二者皆避不开合适粒度的微服务化拆分问题.但目前,该问题的研究尚
                 不成熟,仍处在探索发展过程中.
   56   57   58   59   60   61   62   63   64   65   66