Page 112 - 《软件学报》2021年第5期
P. 112
1336 Journal of Software 软件学报 Vol.32, No.5, May 2021
other-service(ts-order-service)等微服务的可维护性得分偏低,低于 0.62,这与上述指标合并之前的分析结果一
致.ts-admin-basic-info-service 得分之所以偏高,是因为图 7 的 score 未考虑到 SCN、icl、isg.
Fig.7 Comprehensive score results of microservices in Train-Ticket
图 7 Train-Ticket 微服务的综合得分(score)结果
综上可得:ts-preserve-service、ts-travel2-service(ts-travel-service)、ts-order-other-service(ts-order-service)以
及 ts-admin-basic-info-service 的可维护水平相对较低,所需投入的维护成本较高.实验揭示出可维护性低的一个
原因是,相应微服务存在高度代码克隆.我们与 Train-Ticket 系统维护者沟通,他们确认了这一点,并阐述了存在
微服务代码克隆的原因:设计时主要基于业务逻辑进行垂直拆分,且拆分粒度较细;比如,ts-travel-service 和
ts-travel2-service 的业务逻辑类似,因而代码高度相似,但两者针对的车型不同,ts-travel-service 针对高铁车型,而
ts-travel2-service 针对普快等车型.细粒度的微服务拆分确实会产生不可避免的代码克隆,导致微服务难以独立
修改,此外,也会导致微服务间频繁发生交互、可维护性降低.但是,细粒度拆分会起到用户请求分流效果,提高系
统的并发性能,可灵活分配硬件资源、按需伸缩不同业务的服务性能.可见,微服务设计决策难以同时满足高可
维护性和高性能,因而需要根据目标折中考虑.未来我们将对此进行深入研究
3.6 方法比较
我们将本文提出的度量方法与文献[9]中的微服务可维护性度量指标进行比较.选择该文献中的指标作为
本文方法的比较对象,是因为该文献明确指出:其指标是用于度量微服务的可维护性,其可维护性的定义同样遵
循 ISO 25010 标准,详细解释了具有代表性的指标,包括 WSIC(weighted service interface count)、SYI(services
independence in the system)、SIDC(service interface data cohesion).其中,WSIC 是服务提供的对外操作的个数的
带权和,当权值默认为 1 时,WISC 值等于服务对外提供的操作个数和;SYI 是该微服务参与循环依赖的个
数;SIDC 是服务提供的接口操作的参数类型的相似程度.WSIC 和 SIDC 是根据微服务提供的接口和操作进行
度量;SYI 是根据微服务的源代码进行度量.WSIC 值越大、SYI 值越大、SIDC 值越小,则微服务的可维护水平
越低.实验以 Train-Ticket 为对象,将本文所提方法与这 3 个可维护性度量进行对比.
图 8 绘制出 Train-Ticket 中微服务的 WSIC、SYI、SIDC 度量结果.从图中数据观察到:ts-basic-service、ts-
cancel-service 、 ts-preserve-service(ts-preserve-other-service) 、 ts-ticketinfo-service 、 ts-verification-code-service
的 SIDC 值最小,ts-admin-basic-info-service 的 WSIC 值最大,ts-seat-service 的 SYI 值最大.也就是说,这些微服务
比其他微服务的可维护性水平较低.
将上述结果与本文方法的结果(见第 3.5 节)进行对比得出:通过 WSIC、SYI、SIDC 识别出的维护性较低
的微服务与本文方法识别结果存在交集,包括 ts-preserve-service(ts-preserve-other-service)、ts-admin-basic-info-
service;但也存在一些差异.造成这个现象可能的原因是:WSIC、SYI、SIDC 是基于微服务的接口和代码计算而
得;而本文可维护性方法不仅利用了接口和代码,也利用了运行轨迹、修订历史等其他制品,多源特征有助于更
聚焦地定位出维护成本较高的微服务.我们下一步将在更多的实验对象上进行比较和验证.