ICSE 2021丨MicroDiag:微服务系统下的细粒度应用性能诊断系统
论文标题 | MicroDiag: Fine-grained Performance Diagnosis for Microservice Systems
论文来源 | ICSE 2021
论文链接 | https://hal.inria.fr/hal-03155797/document
源码链接 | 未公布
TL;DR
论文中提出一种细粒度的自动根因定位系统 MicroDiag,不仅可以定位到根因组件并且可以挖掘出更加详细的异常信息(指标间异常的因果关系)。MicroDiag 主要思想是基于各个组件间的依赖图和不同的异常传播模式构造指标间的因果关系来推理根因。实验部分在两个微服务集群中测试 MicroDiag 的性能,结果表明定位的 Top3 准确性达到 97%,最低优于 baseline 方法 31.1%。
Problem Formulation
将微服务系统中各个服务、容器和服务器用组件集合 表示,每个组件的指标集合用 表示,其中 表示组件 的指标集合, 表示组件 的第 类指标(例如响应时间,CPU 利用率或 IO 读写速度等)。
基于以上符号定义,本文中细粒度的根因定位问题可以表示为:给定组件集合 及其对应的指标,假设响应时间指标 告警,需要解决的问题是定位出根因指标,不仅包括根因组件 而且包括根因指标类型,例如根因指标 表示根因服务 的 造成系统出现告警。
Algorithm/Model
MicroDiag 根因定位的模型架构如下图所示:
主要包括五个步骤:
Data Collection and Preprocessing
指标数据采集和预处理,针对每个组件采集相关的指标,应该是业务指标和机器指标都采集。
Anomaly Detection
时间序列指标的异常检测,论文中采用的是 Birch 聚类方法仅对响应时间进行异常检测,市面上太多的异常检测算法因此这不是重点!
Component Dependency Graph Construction
论文中首先构建了组件间的依赖关系图来作为构建指标因果关系的基础,因为指标间的因果关系肯定是通过组件间依赖来传播的,以组件间因果关系来减少指标间因果关系的噪声。
Metrics Causality Graph Inference
在组件依赖关系的基础上使用因果推理的方法构建指标因果关系图。
Culprit Metrics Localization
使用 PageRank 算法在指标因果图上排序来定位根因指标。
主要流程图如下所示:
下面详细说下比较重要的上述步骤 3、4、5。
构建组件依赖图
由于异常不仅可以通过微服务的直接调用传播,还可能间接通过容器间资源共享和竞争造成异常。因此需要构造 server、microservice 和 container 三者间的关系依赖图。
假如有些 service、container、server 三者间的依赖关系是已知的,因此可以直接得到一个组件依赖有向图。对于未知的依赖关系:
- 通过 istio 获得 service 间的调用关系;
- 通过 Cadvisor 获取系统指标来得到系统的部署关系;
至于这两个工具如何得到依赖关系未细讲,不知道实际生产系统中是否可行? 🧐
指标因果关系图
指标关系图 MG 中的节点包含每个组件的所有指标,边表示异常传播的方向,如图 2© 所示。
为了确定指标间的因果关系,MicroDiag 将异常传播分为三种类型:
通过资源类指标传播;
通过资源类和业务类指标传播;
通过业务类指标传播;
对于第 1 种类型,MicroDiag 使用 SCM (Structural Causal Model)来进行推理因果。对于资源类指标异常可能导致其它资源指标同时出现异常,其它方法例如 PC 算法通过条件独立性测试很难区分因果因果关系,但是 SCM 方法可以区分这种因果关系? 由于资源类指标可能不符合高斯分布,然后论文中利用 DirectLiNGAM 方法来推导,简单计算方法如下:
对于第 2 种类型,MicroDiag 通过 Granger causality tests 来推理异常的传播方向。
对于第 3 种类型,MicroDiag 直接将服务调用边逆向。
这部分比较重要但是文中未细讲,需要其它额外知识,有兴趣的可以仔细查下资料。
Culprit Metrics Localization
MicroDiag 首先通过皮尔逊相关系统计算指标间的相似性来判断异常传播的概率,归一化权重后通过 PageRank 直接计算图中节点的重要性给出节点排序。
Experiments
Thoughts
- 异常传播方向判定这一部分看起来合理确又不太合理,例如服务调用关系逆向。
- 对实验效果存疑呀!