论文标题丨Using dependency graph and graph theory concepts to identify anti-patterns in a microservices system: A tool-based approach
论文来源丨MERCon 2021
论文链接丨https://www.researchgate.net/profile/Indika-Perera-3
源码链接丨未公布

TL;DR

为了识别微服务架构 (MSA) 设计中的反模式问题,论文中提出了一种新颖的自动化工具解决方案 Microservice Anti-Patterns Insights Generator (MAIG)。首先基于 MSA 中的链路追踪数据来生成依赖图,然后利用图论概念和算法来提取图上的指标进行分析。为了进一步验证该工具的可用性,开发人员使用该工具分析了一个开源系统。

反模式问题

采用数据驱动迁移反模式主要发生在当你从一个单体应用向微服务架构做迁移的时候。我们之所以称之为反模式主要原因是,刚开始我们觉得创建微服务是一个不错的主意,服务和相应的数据都独立成微服务,但这可能会将你带向一个错误的道路上,导致高风险、过剩成本和额外的迁移工作。 ——来源:微服务的反模式和陷阱

Algorithm/Model

论文中提出的方法框架如下所示

流程框架

流程中主要包括四步,且在论文中仅考虑五种微服务反模式:Knot, Nano service, Service chain, Bottleneck service, Cyclic dependency

数据提取

采用分布式链路追踪工具,例如 Zipkin,Jeager 等。采集服务间的调用关系来构造依赖图。目测是采用较长一段时间窗口内的调用关系构图。

依赖图度量

采用图论中的算法和指标来度量依赖图中的节点,采用了三种:

  • 中心性算法
    • 度中心性
  • 社团检测算法
    • 聚类系数
    • 强连通分量

下表展示了图算法如何应用到微服务架构中,

图算法

以不同的指标来区分不同的反模式,如下表所示

反模式及其指标

指标阈值分析

对于上述度量指标需要设定一个阈值来确定分析目标,例如 MSA 系统中服务的聚类系数值超过 0.3 触发分析,这个阈值由人工进行设定。

后续还讲述了 Microservice Anti-Patterns Insights Generator (MAIG) 工具的设计流程,没什么有意义的内容。

Experiments

实验部分在一个 MSA 系统中验证了 MAIG 的有效性。

根据调用关系构造的服务依赖图如下所示:

服务依赖图

针对每个服务计算上述图论指标来判断是否存在反模式的问题。

举例 Knot 反模式应该是指微服务调用子图较为密集,所以对应的指标是聚类系数,计算聚类系数如下所示

聚类系数

聚类系数超过阈值 0.3,就需要采取策略来降低服务间的耦合程度。

Thoughts

  • 整篇论文和微服务的故障定位没任何关系,仅是考虑微服务调用设计上的反模式问题。
  • 至于反模式问题有很多,对这个领域不太了解难以解释。论文仅是采用了图上的几个指标度量反模式问题存在的可能性。

附:MERCon 2021 会议介绍

Moratuwa Engineering Research Conference 2021 (MERCon 2021) is the seventh international conference organized by the Engineering Research Unit, University of Moratuwa(【斯里兰卡】莫勒图沃大学). MERCon solicits research papers describing significant and innovative research contributions in all disciplines of engineering.


联系作者