Page 74 - 《软件学报》2021年第5期
P. 74
1298 Journal of Software 软件学报 Vol.32, No.5, May 2021
微服务方案(方案 1~方案 9).
本文继而使用有效性评估部分介绍的指标对方案 1~方案 9 进行评估,其系统层级的指标计算结果如表 8
所示.为方便对比,表中同时列出了 DFD 方法应用的拆分方案(方案 0)的评估结果.表格中括号内的数字代表该
指标得分值在所有方案中的优劣排名,本文通过计算每个方案所涉及的 4 个指标得分值的排名总和来衡量该
方案对于性能的权衡效果好坏,排名总和越小,代表该方案得到的候选微服务对于性能的权衡表现越好.由评估
结果可知:相同的预期微服务个数 n 的情况下,依靠动态和静态两种数据源的分析相结合的方式所得到的拆分
方案效果优于单一的数据源分析,比如 n=3 的方案中,方案 3 的排名总和小于方案 1 和方案 2;而单一数据源分
析中,仅依赖动态数据支持拆分的效果要优于静态数据分析,同样是 n=3 的方案中,方案 1 的排名总和小于方案
2.这在一定程度上说明了本文所采用的动静态分析相结合的方式支持拆分的合理性和有效性.
灵活性方面,通过上述过程和结果对比可以发现:原有的 DFD 方法基于预先定义的规则对复杂的数据流图
进行分析和拆分,得到的拆分方案是唯一且不支持调整的;本文优化后的 DFD-A 方法可以根据不同的算法参数
(如微服务个数 n)设定给出不同的拆分方案,例如表 8 中在预期微服务个数设置为 3 和 4 的情况下,得到的拆分
方案的性能权衡效果要好于 DFD 方法;而服务个数为 5 的拆分方案效果要劣于 DFD 方法,这种情况下,实践者
可以根据对于服务可伸缩性和性能的需求来灵活选择合适粒度的方案.同时,本文所实现的原型平台实现了根
据实际需求对拆分结果进行手动调整和调整后的再评估,原型平台中的基础服务通过插件的形式来实现,可以
很方便地进行功能的扩展,比如其他类型数据信息的收集、拆分算法以及后期拆分结果的评估指标计算等等;
此外,系统在完成微服务化拆分及实现后,依然还可以继续使用本文的原型平台收集微服务运行时的数据流信
息分析,以进一步调整服务粒度.这一系列的特点都有助于大幅度提高基于 DFD-A 方法进行微服务化拆分的灵
活性.
3) 效率
除了灵活性,效率是所提出的 DFD-A 方法的重要的优化目标,本文通过完成案例的拆分工作所需的时间成
本来衡量两个方法的效率.优化前的 DFD 方法和优化后的 DFD-A 方法应用过程及对应的耗时结果对比如图 8
所示.
Fig.8 Process and the efficiency of applying the DFD and DFD-A method to Jpetstore
图 8 Jpetstore 案例中 DFD 和 DFD-A 方法应用过程及效率对比
DFD 方法应用主要包括 4 个阶段,分别是需求分析(D1)、数据流图构建(D2)、服务拆分(D3)以及拆分后的
指标评估(D4).对于两千行左右代码量的小型案例 Jpetstore,参与评估的一名研究人员约耗费了 3 天(8h 工作制)
来应用 DFD 方法完成该系统的拆分与评估,各阶段的耗时分别是 6h,8h,1h 和 8h.理解其业务需求并构建所需的
数据流图.可以发现,除了其中自动化的服务拆分阶段,其他 3 个阶段由于手动操作的原因造成该方法的应用效
率较低,尤其是基于需求手动构建数据流图(D2)以及对拆分后的结果使用第三方工具进行指标计算和评估
(D4),耗费的时间成本较高(这里未包含数据流图和第三方评估工具的学习时长).DFD-A 的应用需要设计测试
用例(DA1*)以支持数据收集、部署并配置 Pinpoint 监控环境(DA2)收集数据信息、通过本文开发的原型平台
进行数据流信息自动化分析和服务拆分与评估调整(DA3)这 3 个阶段,耗时分别是 4h,5h 和 1h.该部分的对比结