Page 63 - 《软件学报》2021年第5期
P. 63
李杉杉 等:一种优化的数据流驱动的微服务化拆分方法 1287
1.2 数据流驱动的微服务化拆分方法(DFD)
微服务架构提倡根据 Database per Service 原则,为每个微服务设计自己的私有数据库,其他微服务需要通
过微服务暴露的接口来访问数据库中的数据,从而实现数据的隔离性.这有助于解决单体系统中存在的问题,其
通常使用的共享数据库的缺点是容易造成服务的紧耦合,使得任何模式更改都需要在相关服务间协调,可能会
增加部署更改的复杂性.单个数据库的设计也使得每次服务在扩展的时候都需要扩展整个数据库,降低了服务
的可扩展性.此外,复杂单体系统中的单一共享数据库往往很庞大,将会对系统性能的提升造成一定的挑战.
然而,简单粗暴地将数据拆分到不同的微服务中,在实践中被认定为一种反模式.一方面,数据间存在的耦
合性以及服务对于数据访问的频率和类型不同等因素,是微服务化拆分过程中需要考虑的因素,否则将可能会
造成拆分后的微服务频繁的数据交互而降低整个系统的性能;另一方面,一旦共享数据库被拆分到不同的微服
务所拥有的独立数据库中,服务粒度的调整可能会造成较高的数据迁移成本.因此,在向微服务迁移过程中,需
要综合考虑业务操作与数据之间的交互关系来支持微服务的拆分.
[3]
现有的拆分问题研究中,数据流驱动的微服务化拆分方法(以下简称 DFD) 给出了针对上述问题的易理解
操作且结果合理的解决方案.其方法简单来讲是分析业务操作与数据存储之间的交互特点,并构建仅关注这二
者之间交互关系的精简数据流图(DFDPS),在此基础上,通过预设的规则和算法进一步聚合和数据库表关系紧
密的业务操作,从而实现在减小微服务粒度与数据隔离性的同时,尽可能降低对传输性能和数据一致性造成的
影响.该方法的整个过程分为 4 步,用到该方法预先设定的规则和算法,具体如图 1 所示.
1) 需求分析:由需求分析人员对待拆分的软件系统需求进行分析.根据系统用例或自然语言描述的业务
逻辑,识别领域上下文和实体,为数据流图的构建做准备.
2) 精简数据流图构建:基于第 1)步中的用例和业务逻辑分析,由数据分析人员手动构建详细版本的分层
数据流图(第 0 层和第 1 层)和精简的数据流图 DFDPS.详细版本的数据流图构建需要遵循方法预设
的分解规则 1~规则 3;而精简数据流图(DFDPS)的构造过程需要遵循规则 4.所构造的 DFDPS 仅关注
操作 P 与相关数据存储 DS 之间的关系,而排除了诸如外部实体以及数据流传输的具体数据之类的无
关信息.
3) 可拆分数据流图构建:从 DFDPS 中提取操作 P 和数据存储 DS 之间数据交互信息,将精简数据流图
DFDPS 通过算法自动转化可拆分的数据流图.之所以关注操作 P 和数据存储 DS 之间的数据交互,目
的是为了避免数据存储在拆分过程中被分到不同的微服务中,这样可以保证在减小微服务粒度的同
时,尽可能减少不必要的数据一致性的问题.
4) 候选微服务识别:对第 3)步导出的可拆分的数据流图,通过设计的算法进行拆分,具体是根据规则 5 对
同一数据存储的相关操作进行聚合,然后根据规则 6 对出现重复操作的聚合结果进行合并,合并后的
结果作为候选微服务.
[3]
Fig.1 Process of the dataflow-driven decomposition method for microservices
[3]
图 1 数据流驱动的微服务化拆分方法过程