Page 114 - 《软件学报》2021年第5期
P. 114
1338 Journal of Software 软件学报 Vol.32, No.5, May 2021
[7]
之前 FoME 方法的改进.与 FoSCI 方法类似,AMI [26] 方法也是一种基于运行轨迹的多目标优化的拆
分方法,不同的是,AMI 将负载均衡作为优化目标.
(3) 领域驱动拆分.领域驱动的软件设计方法提议围绕业务逻辑设计系统,通过业务分析建立领域模型.
领域驱动设计将业务功能领域分解为限界上下文,每个限界上下文天然对应一个微服务.为了产生适
当粒度的候选服务,通常需要对子领域进行合并或者拆分.Rademacher 等人 [27] 以 Cargo 领域模型为案
例,探讨了领域驱动的微服务拆分面临的挑战.文献[8]调研了产业界的微服务迁移案例,发现多数参
与调研的软件系统通过功能分解识别候选服务,而采用领域驱动拆分的实践相对较少.
(4) 其 他方法 .IBM Mon2Micro(https://www.ibm.com/cloud/blog/announcements/ibm-mono2micro) 与
[3]
[6]
FOSCI 方法、场景驱动 的方法类似,也是从单体系统的运行轨迹中抽取出系统业务逻辑.不同的是,
Mon2Micro 进一步对源代码进行数据依赖分析,将数据依赖和业务逻辑同时输入到深度学习或者机
器学习模型进行训练,将原始单体系统的类划分到不同的候选服务中.这种推荐结果期望尽可能减少
微服务改造时的代码重写成本.
4.2 微服务评估
已有研究工作依据微服务解耦的不同目标分别展开了微服务质量评估研究,衡量产生的候选微服务或物
理服务的合理程度.
(1) 可维护性评估
很多研究评估微服务的可维护性.文献[10]从领域驱动设计的视角,以用例图和实体关系图作为输入,评估
候选服务的内聚性、耦合性、用例收敛性、实体收敛性.用例图描述了软件系统的业务逻辑,实体关系图描述
了关键的领域实体以及实体间的关系.用例收敛性指标和实体收敛性指标的设计都遵循单一职责原则,分别度
量单个服务聚焦于处理特定领域业务功能和处理特定领域实体的程度.文献[13]也将面向对象质量度量指标应
用于微服务评估中.Taibi [14] 提出以执行轨迹为输入,度量 Coupling BetweenMicroservice(CBM)、number of
CLasses per Microservice(CLA)、number of DUPlicated classes(DUP)和 Frequency of External Calls(FEC).由于服
[7]
务接口暴露出该服务对外提供的功能逻辑,FoME 根据接口信息来评估接口个数、接口内聚性、操作个数等,
[6]
认为接口数和操作数越少且接口越内聚,服务的功能越内聚,就越有可能满足单一职责原则.FoSCI 从模块性、
功能性、演化性这 3 个维度设计了 8 个指标评估拆分结果的合理性.功能性描述服务对外提供的功能,遵循服
务的单一职责原则.模块性衡量同一服务内部的实体是否紧密一致,不同服务间的实体是否松散耦合,这是服务
要满足的基本质量属性 [28] .可演化性 [29] 衡量服务独立演化的能力.一个基于服务的软件系统可能由几十甚至几
百个服务构成,如果更改一个服务经常会影响到其他服务,则该服务很难进行故障分析,难以独立修改和演化.
(2) 其他质量属性评估
还有一些工作评估微服务的性能、可扩展性等其他质量属性.微服务系统是由很多规模小的服务通过轻量
级通信协议进行动态交互来为用户提供服务,不同的拆分粒度会影响服务性能.文献[30]分析了微服务架构对
性能带来的影响.也有一些工作遵循设计原则评估微服务,评价解耦推荐的微服务是否与之前计划的解耦设计
原则保持一致.例如,文献[31]评估微服务架构是否符合服务粒度小、领域驱动设计等设计目标.Li 等人 [11] 和
[2]
Chen 等人 定性分析了候选服务的合理程度、易理解程度、客观程度.文献[32]通过挖掘应用程序访问日志,
使用无监督的聚类方找出 URL 组,每个组内 URL 具有相似的性能和资源需求,因而每个 URL 组可映射生成一
个微服务.该工作在真实案例上根据拆分方案实现了相应的微服务系统,分析了产生的微服务系统的性能和可
[3]
扩展性.丁丹等人 对拆分结果使用人工评价,分析拆分方案符合期望的程度以及节省的手工拆分开销.
与上述研究工作不同,本文关注微服务的可维护性质量属性,基于软件的多源特征空间模型,从可维护性的
4 个角度综合评估微服务质量.
5 总结与展望
本文提出了一种基于多源特征空间的微服务可维护性评估方法,并据此实现了原型工具 MicroEvaluator,旨