Page 64 - 《软件学报》2021年第5期
P. 64
1288 Journal of Software 软件学报 Vol.32, No.5, May 2021
尽管通过案例研究证实了 DFD 方法可以产出合理且易于理解的微服务化拆分结果,但仍然存在两方面的
问题有待改进.
• 一方面是数据收集过程的效率较低.由于 DFD 方法目前仅实现了半自动化拆分,拆分的前提是需要依
赖人工分析系统需求,并根据系统用例或业务逻辑手动构建数据流图,因此其更适用于中小型软件系
统,对于大型复杂系统,这种手动的数据收集方式在一定程度上降低了整个 DFD 方法实施的效率.
• 另一方面是拆分算法对于结果可修改性的支持度不高.DFD 方法所使用的拆分算法完全基于生成的
可拆分的数据流图和预设的规则 5、规则 6 来进行实现的,前期人工分析的准确性将在很大程度上影
响拆分结果的可靠性.而 DFD 方法给出的微服务化拆分建议是唯一的且不支持调整,这也限制了该方
法在实际应用过程中的灵活性.
2 优化的数据流驱动的微服务化拆分方法
本文针对上述 DFD 方法的瓶颈问题(效率和灵活性)进行改进,在保证拆分结果有效性的基础上,提出了一
种更加优化的数据流驱动的微服务化拆分方法 DFD-A.本节详述所提出的 DFD-A 方法的优化思路、整体流程
以及基于该方法实现的原型工具.
2.1 优化思路
整体来讲,本文所关注的数据流信息参考 DFD 方法中的简化数据流图(不关注外部实体和数据流上的具体
数据),概念化表示如图 2 所示.
Fig.2 Conceptual dataflow diagram of a legacy system
图 2 遗留系统数据流图的概念化表示
除了业务操作结点 P={P 1 ,P 2 ,…,P 7 }和数据存储结点 DS={DS 1 ,DS 2 ,…,DS 9 },还收集了业务操作 P 之间的交
互频率 W={w 1 ,w 2 ,…,w 10 }以及业务操作和数据存储之间的交互频率 W′ = {,w w′ ′ ,...,w′ }.
1 2 12
有效性方面,基于 DFD 方法的基本原理,交互越频繁的模块关系越紧密,如果被拆分到不同的微服务中,会
导致分布式环境下信息交互的成本增加,从而降低整个系统的性能.考虑到操作之间的交互频率信息反映了业
务操作之间的耦合程度,本文提出的 DFD-A 方法主要依据该信息来作为权重来实现基于图聚类算法的业务操
作子图拆分,可采用的典型算法如基于最小生成树(minimum spanning tree,简称 MST)的图聚类算法 [13] .该算法
的优点是不用计算相似度,可以通过生成关于业务操作结点的最小生成树,并按最大距离原则依次删除一条最
小生成树的边(距离越大,说明耦合性越低)来达到拆分的目的,直到划分为符合个数预期的业务操作集合;与此
同时,微服务架构倡导每个微服务拥有自己的数据库(database per service 原则),这在 DFD 方法中有所关注.本文
对业务操作进行聚类,得到的集合中可能包含与数据库有交互关系的业务操作结点,二者之间的交互频率信息
反映了数据流图中业务操作集合和数据存储之间的耦合关系.鉴于操作之间、操作与数据存储之间的交互关系
紧密程度不同,本文改进了传统的 K-means 算法来保证数据存储被有效拆分到相应的服务中.具体来讲,针对传
统 K-means 算法采用欧式距离来度量样本间相似度的方法对图结构数据集失效问题,本文设计了计算图结点
之间的最短距离作为新的度量方式;其次,支持用户输入中心点来避免 K-means 随机选择聚类中心带来的效果
不稳定问题,K-means 的聚类数据对象是初步拆分得到的操作集合与数据库表,聚类中心是用户根据对被拆分