基于异构图的大规模微服务系统性能问题诊断

简介:本文介绍由南开大学、清华大学、腾讯、国家超级计算天津中心共同合作的论文:基于异构图的大规模微服务系统性能问题诊断。该论文已被IEEE Transactions on Services Computing期刊录用

论文标题:Diagnosing Performance Issues for Large-Scale Microservice Systems with Heterogeneous Graph

作者:陶磊,卢香琳,张圣林,栾佳琪,李英可,李明杰,李则言,于庆阳,谢虎成,徐锐杰,胡宸源,杨灿群,裴丹


微服务系统的可用性对业务运营和企业声誉至关重要。然而,微服务系统的动态性和复杂性给大规模微服务系统的性能问题诊断带来了重大挑战。在调查了腾讯公司数百个真实的性能问题案例后,文章发现,以前的故障排除方法未能准确定位根本原因,因为它们忽略了因果关系与调用关系之间的不一致性。因此,文章提出了一种新方法——MicroDig,用于诊断大规模微服务系统的性能问题。具体来说,MicroDig 构建了一个异构传播图,以捕捉调用与微服务之间的因果关系。然后,它进行面向异构性的随机游走(Heterogeneity-Oriented Random Walk,HORW),以确定导致问题的微服务。

文章在三个数据集上评估了 MicroDig 的性能,这些数据集包括来自腾讯的60个真实性能问题案例、来自广泛使用的开源微服务系统中收集的80个手动注入的问题以及来自一家全球顶级商业银行使用的电子商务系统中的128个性能问题。MicroDig 在这三个数据集上的Top-3准确率分别达到了94.1%、85.5%和93.8%,显著优于六种流行的基准方法。

背 景

在真实的生产环境中,微服务的主要性能问题是高延迟和低可用性,这可以从超时调用次数和异常调用次数中分别感知到。性能问题可能由于多种原因引起,例如主机资源有限、硬件可用性和网络不稳定。当某个服务出现性能问题时,这些异常会沿着调用拓扑传播,最终可能影响到微服务系统提供的外部服务。为了保证卓越的用户体验,运维人员配置了服务级别指标(SLI)和服务级别目标(SLO)来监控微服务系统的可用性。当某个服务的运行状态未能达到SLO标准时,就会检测到性能问题。由于服务数量众多、关系复杂且动态变化,以及微服务系统中调用关系与因果关系之间的不一致性,确定根本原因仍然具有挑战性。

研究动机

有些工作将调用关系视为异常传播的因果关系,这在文章提到的场景中过于简化。图1展示了一个真实的性能问题,其中A、B和C分别代表三个微服务。A调用B和B调用C的异常调用次数都增加了,然而,当运维人员深入调查细节时,他们发现C没有任何有意义的错误报告。另一方面,来自B的调用(即B调用C)是异常的,这是因为B耗尽了文件描述符,无法与C建立新的连接。总之,A调用B和B调用C的异常率是由B的系统资源所导致的,在这种情况下,B是根本原因服务,这无法通过沿着调用关系进行搜索来定位。在调查了腾讯数百个性能问题后,文章发现超过35%的性能问题受到这类情况的影响。

基于上述观察,文章发现一个调用的异常不能仅直接归因于下游服务。相反,调用方和被调用方都可能导致这种情况。因此,仅通过调用关系来捕捉异常传播是不够的。文章提出了一种图模型即异构传播图,来比调用关系更精确地描述因果关系。

在这里插入图片描述

图1 一个真实的性能问题案例

方法设计

MicroDig的核心框架如图2所示。当微服务系统的监控组件检测到某个服务的运行状态未能达到SLO标准时,MicroDig会被触发以定位问题根因。

在这里插入图片描述

图2 MicroDig的核心框架

MicroDig由三个关键阶段组成:

关联调用识别阶段:MicroDig从问题微服务开始搜索,找到与性能问题相关的候选微服务。大规模微服务系统通常会在短时间内产生海量的服务调用,其中大量的服务调用与性能问题无关。为了更准确地确定与性能问题相关的微服务,文章首先选择构建端口级别的调用图。然后通过对图进行BFS(广度优先搜索)和异常检测来保留相关的调用和相应的微服务。最后,将图中的端口级节点聚合到服务级,如图3(b)所示。文章首先检测异常端口,因为如果先进行端口聚合,则异常端口级调用可能会被同一微服务的正常调用淹没,这可能会导致根因服务在这一步被过滤掉。

异构传播图构建阶段:MicroDig以微服务之间的调用和候选微服务作为节点,构建异构传播图。在关联调用识别阶段构建的关联图是有向的,其边的方向表示服务之间的调用关系。关联图不能直接用作根因定位的因果图。文章基于关联图构建了一个反映调用和服务之间因果关系的异构传播图。如图3(c)所示,文章首先将关联图中的边(即边S1→S2、边S2→S3等)抽象为调用节点(表示为C12、C23等),并将关联图中的节点抽象为服务节点(表示为S1、S2等)。然后,文章在因果图中添加调用节点与服务节点之间的边和两个不同调用节点之间的边。最后,构建具有不同类型节点和边的异构传播图,在传播图中,边是从原因指向结果。为了执行根因定位,文章翻转传播图中的每条边,并使边从结果指向原因。

根因服务定位阶段:提出了一种面向异构性的随机游走算法,在异构图上进行根因微服务排名。通常在因果图上使用排序算法来找出根本原因,然而传统的排序算法不能直接应用于异构因果图。因此,文章提出了一种新颖的排名算法,即面向异构性的随机游走(HORW),结合相关系数和异常检测结果进行根因微服务排名。

在这里插入图片描述

图3 异构传播图的构建过程

实验评估

为了评估MicroDig的性能,文章进行了广泛的评估实验,使用了从全球顶级多媒体服务提供商腾讯收集的60个真实性能问题、从广泛使用的开源微服务系统Train-Ticket中收集的80个手动注入的性能问题,以及从全球顶级商业银行的电子商务系统中收集的128个性能问题。最终的实验结果如表1所示,在真实世界数据集和模拟数据集上,MicroDig在94.1%、85.5%和93.8%的性能问题中将真正的根因微服务排名在前三,分别比六种流行的基准方法高出16.0%、32.2%和88.5%。
在这里插入图片描述

图片表1 实验结果

总 结

文章提出了一种名为MicroDig的方法,用于大规模微服务系统中性能问题的自动根因定位。MicroDig识别关联调用,并基于动态微服务调用构建异构传播图,再应用面向异构性的随机游走(HORW)来发现异常传播模式并定位问题服务。通过使用从腾讯收集的真实性能问题以及从Train-Ticket和中国建设银行收集的手动注入问题,证明了MicroDig的有效性和效率。与六种流行的根因定位方法相比,MicroDig表现出色。

总体而言,MicroDig在性能问题自动根因定位方面展现了很大的潜力和实际应用价值,有效解决了大规模微服务系统中性能问题的根因定位难题,显著提高了诊断的准确性和效率。


欢迎报名2024 CCF国际AIOps挑战赛!

2024 (第七届)CCF国际AIOps挑战赛由中国计算机学会(CCF)主办,中国计算机学会互联网专委会、清华大学、中国科学院计算机网络信息中心承办,中兴通讯、北京智谱华章科技有限公司、中南大学计算机学院、清华大学计算机科学与技术系、北京必示科技有限公司协办。同时,本届AIOps挑战赛也是OpenAIOps社区成立之后第一届重要年度赛事。

本次挑战赛以“基于检索增强的运维知识问答”为赛题,旨在探索如何结合领域私有技术文档进行高效私域知识问答。首次采用大模型检索增强(RAG)技术,基于中兴5G领域运维技术文档,揭示在通用大语言模型基座下,垂直领域知识问答面临的领域知识缺失、公私域知识冲突、多模态图表并存等一系列挑战。

目前挑战赛报名进行中,欢迎报名参赛!(报名网址:https://aiops-challenge.com)更多赛事相关信息将在社区“智能运维前沿”公众号发布,同时OpenAIOps社区群将提供赛事通知、技术答疑,有意者可扫码添加官方微信号(OpenAIOps社区小助手)入群。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/659927.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

有限元之抛物型方程初边值问题解法

目录 一、原方程的变分形式 二、有限元法进行空间半离散 三、差分法进行时间全离散 四、相关量的数值计算 五、编程时的说明 六、算例实现 6.1 C代码 6.2 计算结果 本节我们将采用有限元法联合差分法来数值求解抛物型方程的初边值问题: 其中常数。 一、原方…

达梦数据库安装手册

首先了解达梦数据库相关内容: 达梦在线服务平台 下载windows版本开发版,将下载的文件解压。进行安装 2、安装流程,默认选择下一步。 3、安装引导,默认下一步,安装实例可以进行修改 4、最后一步记录一下创建的摘要 …

六西格玛项目课题决策权归属:谁来做主更明智?

在实施六西格玛的过程中,一个关键的问题摆在了我们面前:应该由谁决定六西格玛的项目课题?这个问题不仅关系到项目能否顺利实施,更直接影响到企业整体绩效的提升。深圳天行健企业管理咨询公司解析如下: 首先&#xff0…

基于Java实现的图书管理系统

前言:该图书管理系统实现了查找、添加、删除、显示、借阅、归还等功能,分为两个用户群体:管理者和普通用户。使用了类与对象,封装继承多态,抽象类和接口等Java基础知识。 一.思路 面向对象三部曲:找对象&…

JavaDS-学习数据结构之如果从零开始手搓顺序表,顺带学习自定义异常怎么用!

前言 笔者开始学习数据结构了,虽然笔者已经会用了,不管是C 中的stl亦或是Java 中的集合,为了算法比赛多少都突击过,但只知其然而不知其所以然,还是会限制发展的,因此,笔者写下这篇博客.内容是手搓一个顺序表.顺带加一点异常的使用,大伙看个乐子就好了.有错误直接私信喷我就好了…

【AI赋能】香橙派OrangePi AIpro初体验

【AI赋能】香橙派OrangePi AIpro初体验 1、初识香橙派1.1、仪式感开箱1.2、OrangePi AIpro(8T)介绍 2、上电开机2.1、开机2.2、串口调试2.2.1 两种方式登录2.2.2 相关信息 2.3、启动系统2.4、网络配置 3、连接摄像头4、目标检测4.1、Jupyter Lab模式4.2、 目标检测测试4.2.1 视…

花钱学谢宁DOE培训,投入产出比到底如何?

在当今这个快速发展的时代,无论是职场人士还是创业者,都渴望通过不断学习来提升自我能力,以便在竞争激烈的市场中脱颖而出。其中,谢宁DOE培训因其独特的理念和方法,吸引了众多求学者的目光。然而,面对不菲的…

多条文本转二维码怎么做?一键批量建码的使用技巧

怎么快速的制作多条文本信息的二维码?随着二维码的广泛使用,现在很多内容都可以通过生成二维码扫码的方式来获取信息,其他文本二维码就是比较常用的一种类型。那么当需要将多条不同的文本内容每条单独生成二维码时,有什么方法可以…

如何借VR之手,让展厅互动更精彩?

VR虚拟现实技术以其卓越的沉浸式体验为特点,引领用户踏入一个全新的虚拟世界,正因如此,它开始被广泛应用于展厅、商业等多个领域。那么,今天,让我们就来了解一下这种技术是如何为展厅带来精彩互动体验的吧!…

Hudi之数据读写探究

Hudi之数据读写深入探究 1. Hudi数据写入 1-1. 写操作 Hudi数据湖中的数据更新、插入和删除操作,是一个基于Apache Hadoop的库,为数据湖提供了一种有效的方法来处理更新和增量数据,并支持基于时间的快照和增量数据处理。Hudi支持三种主要的…

可道云网盘的URL链接能干什么?小白必看的teamOS使用技巧

在繁复的工作日常里,我们每天都在与各种文件和资料打交道。由于文件夹太多,常常会陷入那种死活找不到想要的文件的困境中。 比如询问同事,合同模板在哪,直接发微信当然是很快的,但是事后想归档总是格外麻烦。比如&…

英飞凌24GHz毫米波雷达-BGT24LTR11N16家用机器人应用

BGT24LTR11N16基础描述: 关于BGT24LTR11N16,它是一款用于信号生成和接收的硅锗雷达MMlC,工作频率为24.00GHz至24.25GHz ISM频段。它基于24GHz基本电压控制振荡器(VCO)。 这颗芯片是属于1T1R,也就是一发一收…

10年老运营人吐血整理,给新媒体运营人的20条建议!沈阳新媒体运营培训

对于企业,在新媒体平台开设官方账号应该是已经成为标配。不仅是对企业新媒体运营需求量提高,新媒体人的薪资也是水涨船高。 另外值得注意的是,企业对资深新媒体运营人才尤为重视,这表现在他们不惜重金招聘高薪新媒体运营人才&…

Android Studio中xml预览不显示问题解决办法

具体表现: Android Studio的XML中可以看到视图的相对位置结构,但是看不到具体的模样,全黑,等于半摸黑调UI(由于我已经修好了所以没有截图)。不是所有的项目都会这样,一部分项目是正常的。 或许…

OrangePi_Kunpeng_Pro开发板测验——性能巨人

文章目录 📑前言一、开箱初体验的愉悦二、产品规格概述三、前置工作四、性能测试4.1 CPU 性能测试4.1.1 单线程 CPU 测试4.1.2 多线程 CPU 测试 4.2 内存性能测试4.2.1 内存读写性能测试4.2.2 高负载内存测试 4.3 I/O 性能测试4.4 网络性能测试4.5 测试小结4.5.1 CP…

跨域的解决方案

1. 计算机更改跨域 1.C盘->Windows->System32->drivers->etc 2.修改hosts 文件2. Chrome浏览器的跨域设置 操作步骤:1.打开我的电脑——C盘 新建一个文件夹,命名为MyChromeDevUserData2.右键——Chrome——快捷方式——目标,在…

使用python绘制一个五颜六色的爱心

使用python绘制一个五颜六色的爱心 介绍效果代码 介绍 使用numpy与matplotlib绘制一个七彩爱心! 效果 代码 import numpy as np import matplotlib.pyplot as plt# Heart shape function def heart_shape(t):x 16 * np.sin(t)**3y 13 * np.cos(t) - 5 * np.cos…

高级软件工程师带你解决MySQL死锁问题Deadlock found when trying to get lock实战案例全网唯一

高级软件工程师带你解决MySQL死锁问题Deadlock found when trying to get lock实战 前言 笔者我实际工作中,经常遇到mysql数据库死锁问题!CSDN上面也有很多大神刨析解决方法! 我在实际工作中的MySQL数据库架构很复杂,又涉及到主…

「异步魔法:Python数据库交互的革命」(一)

Hi,我是阿佑,今天将和大家一块打开异步魔法的大门,进入Python异步编程的神秘领域,学习如何同时施展多个咒语而不需等待。了解asyncio的魔力,掌握Async SQLAlchemy和Tortoise-ORM的秘密,让你的数据库操作快如…

Linux新增磁盘挂载分区

1. 查看磁盘分区名称 lsblk 可见,新增的分区为 sdb 2.格式化磁盘 mkfs.xfs -f /dev/sdb 3.挂在磁盘到 /ocean目录,挂在前先创建空目录 /ocean mkdir /oceanmount /dev/sdb /ocean 执行后,可用 df -h 查看分区是否成功 4.持久化磁盘分区&a…