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

本文分享自华为云社区《【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. async await和promise的区别,和使用方法

    async和promise都是异步方法,区别是async生成的结果是promise对象,async是promise的终结版. await只能在async中使用,await是阻塞的意思,就是暂停,你一起 ...

  2. 【STM32】简述串口中断流程

    串口中断的实现(函数名参考MX生成代码) 初始化: 1.void MX_USART1_UART_Init() 基于UART_HandleTypeDef huart,对huart的成员进行配置,并将数据 ...

  3. Spring学习记事本

    原因:原因:Application的启动类不能放在默认的java目录,必须放在建有包的目录下.

  4. 开发Unity3D移动端输入插件 UGUI Touch Input Component

    UGUI Touch Input Component 为了在移动设备上操控角色,本人便开发了UGUI Touch Input Component输入类插件. 特点 本插件中总共包含三种组件:the v ...

  5. c++学习2 基础关键词

    三 volatile强制访问内存 在一个变量的频繁使用中,系统为了提高效率,会自动将内存里面的数据放入CPU里的寄存器里.但在某些特殊场景下,放入寄存器这个操作反倒会导致CPU无法及时获取最新的一手数 ...

  6. idea设置svn忽略文件

    第一步: 第二步: 第三步:

  7. AI基本知识

    一.什么是flops 对flops有疑惑,首先得先捋清这个概念: FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为 ...

  8. Elasticsearch 查询小笔记

    2.x 版本,组合多查询https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-queries-together.h ...

  9. uart 理解

    1: 串口字符串传输和单字节传输的差异体现在字节与字节间是或在停止位后有空闲位的插入(下图红箭头处,没有插入),即 uart_send("123")  和 uart_send('1 ...

  10. 第14章 身份验证:使用Identity将用户添加到应用程序(ASP.NET Core in Action, 2nd Edition)

    本章包括 ASP.NET Core中web应用程序的身份验证工作原理 使用ASP.NET Core标识系统创建项目 向现有web应用添加用户功能 自定义默认ASP.NET Core标识UI 像ASPN ...