TL;DR
论文中提出一种新的微服务根因定位方法 AAMR(Automated Anomalous Microservice Ranking)。主要思想:首先根据实时指标构建服务依赖图,然后自动更新每个服务的异常权重,最后基于 PageRank 随机游走进行根因定位。实验部分在 K8s 集群中验证了 AAMR 优于当前大多数 baselines。
Problem Definition
AAMR 方法主要解决的问题是:确定根因服务Vrc 并对每个根因的关联指标进行排序。
定义的符号表示如下:

Algorithm/Model
AAMR 整体框架如下所示:

主要包含以下五个阶段:
Metrics collections 指标收集
- System-level:物理机或者虚拟机级别的 CPU、内存、网络指标
- Application-level:响应时间、workload等
Anomaly detection 异常检测
仅针对服务响应时间使用 BIRCH 聚类算法进行异常检测,聚类结果ADs 超过 1 表示异常。定义初始微服务初始异常分数AS 为 ADs-1。
SDG Construction 服务依赖图构建
根据网络调用关系确定图的调用边,以此得到加权 DAG 的服务依赖图G(V,E,W) ,没解释初始边权重如何得到 ❓
Weight Updating 权重更新
首先,定义节点Vi 的异常邻居节点集合AAN(Vi), 及其第 2-hop 异常节点集合NHAN(Vi)。
然后,定义两个指标度量节点异常程度:
iScore,即所有邻居节点异常分数均值。
iScore (Vi)=Degree(Vi)∑j=1NAS(Vj),Vj∈AAN(Vi)
其中N 表示AAN(Vi) 数量。
xScore
xScore(Vi)=x(Vi)−∑j=1NDegree(Vj)∑j=1NAS(Vj),Vj∈NHAN(Vi)
其中x(Vi) 表示HNAN(Vi) 的平均异常分数。
从以上定义看出:iScore 表示AAN(Vi) 的异常程度,xScore 表示NHAN(Vi) 的正常程度。综合这两个指标再定义 ixScore:
ixScore(Vi)=iScore(Vi)+xScore(Vi)
基于假设就是:如果节点Vi 其邻居节点都是异常的,但是邻居的邻居却是正常的,那么Vi 很可能为根因。
考虑到物理机的资源利用率和部署在该物理机上服务的响应时间是相关的,所以计算下前端响应时间Vfe(∣M∣fe) 和资源指标hi(∣M∣i) 的关系:
Corr(Vfe,hi)=∑t=0T(∣M∣fe−∣M∣fe)2∑t=0T(∣M∣fe−∣M∣i)2∑t=0T(∣M∣fe−∣M∣fe)(∣M∣fe−∣M∣i)
正常情况下前端服务和主机的资源利用率值趋于 0 没什么关系。
最后定义微服务Vi 的异常权重为
w(Vi)=ixScore(Vi)×maxCorr(Vfe,hi)
max 应该是想取系统指标中最异常相关的指标。计算得到的异常分数示例如下

Two-phase Ranking 根因排序
- 第一阶段:老生常谈的 Personalized PageRank 得到的根因列表
- 第二阶段:针对根因的异常指标再进行一次排序,这一步没说明用的什么方法,目测是根据指标的异常程度排序。
Experiments
实验部分采用 Online Boutique 服务架构进行测试,11 个微服务节点。
Baselines:RS(根据专家知识随机选择),MicroRCA,Microscope
实验对比结果如下:

效率对比结果如下:

Thoughts
- 整体思路没有脱离 PPR 范围,同时考虑了物理机系统指标和应用指标。
- Anomaly 没考虑过响应时间指标聚类进行异常检测,难以说明方法合理。
- 调用链中定义的两个指标来判断节点的异常程度有点新颖,但是不太符合实际逻辑。
- SDG 说是有向图但是都当无向图处理…有点扯。