摘要:服务发生性能恶化时,需要投入大量人力分析性能异常根因,分析成本高,耗时长。我们提出了一种先在异常调用链内部分析候选根因,再在全局拓扑环境下对候选根因进行汇聚的二级分析方法,克服了调用链之间异常相互影响导致根因难以确定的问题,快速识别和定位恶化接口的根因。

本文分享自华为云社区《【AIOps专题】API性能恶化根因分析》,作者:DevAI。

背景介绍

当微服务系统发生性能恶化问题时,真正有问题的服务和与它相关的服务,都会出现指标异常以及发出告警。大量的告警让运维人员无法确定哪个服务才是恶化根因,只能逐个服务去检查,排除掉那些本身并没有异常的服务,定位成本高。自动化的恶化根因定位服务对于快速处理基于服务的系统恶化是非常重要的。

图例 调用链上的根因定位

基于长尾任务的性能恶化根因分析

一种常见的根因分析方法是将耗时长尾事件作为性能异常的根因事件。首先获得指定时间窗口内的恶化调用链,遍历接口恶化关联的多个调用链,选择耗时最长的一条;再基于耗时主导原则,对这条耗时最长的调用链找到耗时最长的调用事件,并将其作为恶化根因。这种方法的主要缺点在于,只考虑服务的耗时情况,认为根因只会发生在耗时最长的一条恶化调用链,对调用链结构异常、参数错误等导致的性能异常不具有识别能力;

基于单调用链拓扑的性能恶化根因分析

基于单调用链拓扑的性能恶化定位方法,首先从历史成功调用链数据中提炼正常调用链模板,对于每条待测用例,匹配最佳模板,再进行差异分析,最后排序推荐根因。这种根因分析方法仅着眼于根因在单条调用链上的影响因素,忽略了异常在调用链之间的相互影响以及调用链之间的差异。

基于恶化传播图的性能恶化根因分析

此方法针对目前相关性分析方法没有很好考虑到微服务动态位移的问题,设计新的异常评分算法以衡量微服务组件的恶化程度,构建恶化传播图;然后对传统随机游走算法进行优化。然而基于随机游走的方法都存在一个缺陷,即当系统中同时出现多个恶化时,服务可能会受到叠加影响,而导致定位的准确性下降。

基于拓扑汇聚的性能恶化根因分析方法

针对当前痛点,我们提出了一种基于拓扑汇聚的性能恶化根因分析方法,该方法最创新的特征是提出了一种先在异常调用链内部分析候选根因,再在全局拓扑环境下对候选根因进行汇聚的二级分析方法,综合利用了微服务场景下尽可能多的信息,并进行了综合汇聚和多指标评价,克服了调用链之间异常相互影响导致根因难以确定的问题,快速识别和定位恶化接口事件粒度的根因,减少了根因定位分析成本。方案主要包含两个模块,预处理模块和汇聚定位模块。

预处理模块通过输入时间窗口内的正常调用链数据,学习正常调用链模式并建立全局拓扑,包括三个部分:建立正常模板库、提取真实节点拓扑和维护反向可达性表。

汇聚定位模块首先对候选根因从三个维度进行分数计算,再根据汇聚公式对候选根因进行汇聚,包含三个维度的计算:链上得分的计算、链间得分的计算和拓扑得分的计算;再根据组合公式,得到最终的根因推荐分数,分数越高表示越有可能是根因。

总结

针对目前性能恶化定位成本高的问题,我们提出了一种先在异常调用链内部分析候选根因,再在全局拓扑环境下对候选根因进行汇聚的二级分析方法,并提出了一种计算三项得分的多维评价方法,综合考虑真实环境中的多种因素,以更准确更高效地推荐根因。

文章来自:PaaS技术创新Lab,PaaS技术创新Lab隶属于华为云,致力于综合利用软件分析、数据挖掘、机器学习等技术,为软件研发人员提供下一代智能研发工具服务的核心引擎和智慧大脑。我们将聚焦软件工程领域硬核能力,不断构筑研发利器,持续交付高价值商业特性!加入我们,一起开创研发新“境界”!

PaaS技术创新Lab主页链接:https://www.huaweicloud.com/lab/paas/home.html

点击关注,第一时间了解华为云新鲜技术~

4种API性能恶化根因分析的更多相关文章

  1. 8 种提升 ASP.NET Web API 性能的方法

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

  2. 8种提升ASP.NET Web API性能的方法

    英文原文:8 ways to improve ASP.NET Web API performance ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没 ...

  3. [转载]8 种提升 ASP.NET Web API 性能的方法

    http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance 英文原文:8 ways to improve A ...

  4. 8 种提升 ASP.NET Web API 性能的方法 (转)

    出处:http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance ASP.NET Web API 是非常棒的 ...

  5. 背景建模技术(二):BgsLibrary的框架、背景建模的37种算法性能分析、背景建模技术的挑战

    背景建模技术(二):BgsLibrary的框架.背景建模的37种算法性能分析.背景建模技术的挑战 1.基于MFC的BgsLibrary软件下载 下载地址:http://download.csdn.ne ...

  6. 8 种提升ASP.NET Web API性能的方法

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

  7. (六)C#中判断空字符串的三种方法性能分析

    三种方法分别是: string a=""; 1.if(a=="") 2.if(a==string.Empty) 3.if(a.Length==0) 三种方法是等 ...

  8. C#中判断空字符串的3种方法性能分析

    3种方法分别是:string a="";1.if(a=="")2.if(a==String.Empty)3.if(a.Length==0) 3种方法都是等效的, ...

  9. Java中9种常见的CMS GC问题分析与解决

    1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...

  10. Apache Spark 2.0三种API的传说:RDD、DataFrame和Dataset

    Apache Spark吸引广大社区开发者的一个重要原因是:Apache Spark提供极其简单.易用的APIs,支持跨多种语言(比如:Scala.Java.Python和R)来操作大数据. 本文主要 ...

随机推荐

  1. Linux 第二节(基本命令)

    www.linuxcool.com 一.ifconfig 1.Ip 地址 2.MAC地址 3.收到的数据包(RX) 4.发送的数据包(Tx) 二.uname uname -a    //查看系统内核及 ...

  2. 样式优先级的规则:!important`>行内样式>嵌入样式>外链样式>id选择器>类选择器>标签选择器>复合选择器>通配符>继承样式

    CSS样式的优先级应该分成四大类 第一类`!important`,无论引入方式是什么,选择器是什么,它的优先级都是最高的. 第二类引入方式,行内样式的优先级要高于嵌入和外链,嵌入和外链如果使用的选择器 ...

  3. Ext中数据表格序号超过3位数时显示省略号

    问题 在老项目上优化时,遇到了Ext中ColumnModel序号超过3位数时,自动显示了省略号,不友好 修改方法 给RowNumberer添加样式 new Ext.grid.RowNumberer({ ...

  4. javaweb链接到数据库(mysql)操作

    准备:配置好数据库,下好mysql connect 第一步:将my connec文件和commons-dbutil(,jar)复制到webapp文件下WEB-INF的lib文件中,然后右键构建路径. ...

  5. ubuntu中用vscode

    下载vscode 终端中输入code运行 输入sudo apt-get update sudo apt-get install gcc 此报错解决方式: sudo rm /var/lib/dpkg/l ...

  6. 如何在微信小程序中使用ECharts图表

    在微信小程序中使用ECharts 1. 下载插件 首先,下载 GitHub 上的 ecomfe/echarts-for-weixin 项目. 下载链接:ecomfe/echarts-for-weixi ...

  7. 小梅哥课程学习——串口发送应用之发送数据(适用于板级验证,时间间隔位100ms)

    //此代码的注意事项,首先这个代码不能仿真成功会出现一定的时间延迟, //因为在做板级验证的时候把时间改成了100ms发送一次,要想仿真成功,把时间改成499999 //使用上一节课设计的发送模块,设 ...

  8. 阿里云Linux服务器部署JDK8实战教程

    下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 文件上传 把下载的文 ...

  9. nodejs路由

    Router与route: Route是一条路由: 如:/users - - > 调用 getAllUsers()函数 /users/count/ - - > 调用 getUsersCou ...

  10. 十大经典排序之快速排序(C++实现)

    快速排序 通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小.之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的. 思路: (1)选择基准:从数列中挑出一个 ...