Page 113 - 《软件学报》2021年第5期
P. 113
晋武侠 等:基于多源特征空间的微服务可维护性评估 1337
(a) SIDC 值的曲线图
(b) WSIC 和 SYI 值的度量值
Fig.8 Measurements of SIDC, WSIC, SYI for microservices in Train-Ticket system
图 8 Train-Ticket 系统中微服务的 SIDC、WSIC、SYI 度量结果
4 相关研究工作
4.1 微服务拆分
微服务拆分将遗留的单体架构系统解耦成一组独立运行、以轻量级通信机制进行交互的规模相对较小的
服务.根据拆分边界的选择方式分类,微服务拆分包括数据驱动的方法、结构驱动的方法、领域驱动的方法.
(1) 数据驱动拆分.这类方法倡导从软件系统的数据库或者数据流开始拆分.Levcovitz 等人 [25] 基于人工
经验分析,将软件系统的数据库表根据领域知识划分成不同组,然后将访问同一组数据库表的代码类
[2]
或者代码方法组织在一起,对应生成可选的候选服务.Chen 等人 认为数据流图体现了软件系统的业
务逻辑,提出了基于数据流识别可能的候选服务,数据流由软件架构师或者开发人员绘制提供.丁丹
[3]
等人 提出了一种场景驱动、自底向上的拆分方法,该方法从数据库拆分出发,向上映射到系统代码
的拆分,考虑了数据关联度、数据共享度、拆分开销等不同拆分因素,在拆分迭代过程中融入用户反
馈,这种半自动的方法推荐的拆分方案符合目标期望.
(2) 结构驱动拆分.还有一些研究基于软件依赖结构、运行轨迹等反应软件结构的信息来设计拆分方案.
[4]
[5]
Gysel 等人 和 Mazlami 等人 抽取代码中的依赖结构信息,将软件系统建模表示成图结构,然后设计
[4]
图切割算法切分图,每个子图则对应一个可选的候选服务.ServiceCutter 是一个服务拆分的可视化
工具,用户自定义的一系列接口操作和用例作为拆分输入,基于模块化思想,根据操作间的耦合程度
[6]
对接口进行聚类.Jin 等人 认为功能测试驱动下产生的运行轨迹能够反映系统的业务功能,提出了以
单体系统的运行轨迹作为输入,设计一种基于多目标优化技术的服务拆分方法 FoSCI,该方法是对其