NSDI11-Spectroscope-Diagnosing performance changes by comparing request flows
通过比较请求流诊断性能变化
Fireknight.tech 个人博客,欢迎访问,CSDN不定期更新
总结
比较两次执行(系统修改前后)的请求流(时间、结构体)发现问题;对时间方面,使用假设检验,检查某种分类的时间分布是否和之前一致,从而判断是否一致。对于结构,寻找变异及其对应的前体,来发现性能改变
设计的算法可以确定和排序请求流/时间中的改变
工具 Spectroscope
假设背景:我们的技术假设性能变化是由系统变化引起的(代码变化、配置变化等)。需要对比变化前后系统的执行来进行前体/编译的区分。
- 可否应用于性能问题?[Q]
定义两种突变情形
- 响应时间突变
- 结构体突变
执行过程
- 分组(聚类)
- 区分突变和前体(KS和阈值)
- 突变和前体关联
- 排序
- 定位low-level difference
相比TPROF,
都是聚类分组算法,聚类分组才能比较,
- TPROF有多种聚合层次,多了一个subspan,剩下的就是时间和结构体
- 本文分为时间和结构体
- TPROF如何分类前体和突变[Q]
本文提出了low-level参数
1. Intro
性能变化通常表现为请求服务的变化
- 突变 - 问题期间新的请求流
- 前体
主要工作
- 识别突变,根据贡献度排序,高亮最显著的分歧,定义最有可能导致问题的low-level参数
突变分类
- 响应时间突变:结构相同,响应时间不同
- 结构突变:不同路径,需要找到其原请求流然后定位根因
3. 行为改变和异常检测
- 本文注重两个时间段进行比较
- 异常检测(pinpoint)注重于找到一个集合中异常的部分
4. Spectroscope
4.1 分组
按照结构分组(也就是字符串遍历,DFS)
结构分组依据依据:
- 类似的path会有相同的cost
- 结构相同,字符串遍历相同
对每个分类统计请求数、平均响应时间、方差,边缘延时及其方差
聚类算法的优缺点
- 聚类算法用来减少分出来类别的数量,减少开发者需要查看的类型。直接用的聚类会把突变前体(新版本中有两者)分到一起,掩盖了突变的存在
- 无监督聚类算法 – Magpie
4.2 比较请求流
- 输入:有问题阶段和无问题阶段
使用统计测试和启发式来识别哪些包含结构突变、响应时间的突变或前体。
- 输入:有问题阶段和无问题阶段
5. 算法 - 比较请求流
5.1 区分时间突变
- KS假设检验 - 系统更改前后两个时间段,对于相同的结构,假设检验后时间段是否和前一个时间段相同
- 非问题期和问题期作为输入;如果测试拒绝假设,则标记为包含响应时间突变
- 为了识别导致突变的组件或者交互,spectropscope提取critical path-最长时间路径,在此path的edge上也运行假设检验
5.2 区分结构突变
- 系统在改变前后的请求数类似,则,一个请求数量(在错误阶段)的增加对应着别的请求的减少(采用别的边的请求)。一个分类的请求本身数量也会抖动,所以采用一个阈值。
- 阈值 – Spectroscope假设在非问题期和问题期运行类似的工作负载。因此,可以合理地预期,在问题期间,通过分布式系统的一条路径的请求数量的增加,应该对应于通过其他路径的请求数量的减少
- 问题期间的分类,相比非问题之间的分类,如果包含更多的SM_THRESHOLD请求,则标记为突变,包含更少SM_THRESHOLD标记为包含前体(相同请求?相同根节点?)
5.3 前体和突变对应(只有结构突变才有这种对应)
根节点一致
数量限制
- 剩余前体的请求数量减少 少于 结构突变请求数量增加(根节点一致为前提,且数量变化异常),就删除这个前体
- 一个前体贡献若干变异,变异的请求数量增加少于前体请求数量减少,排除
字符距离
5.4 排序
- 权重:突变时间差*数量
- 如果有多个前体,则使用平均时间加权来排序
5.5 寻找low-level difference
- 识别突变前后的参数差异,来定位问题
5.6 缺陷
- 不适用于争用导致的问题
- 对于不同的负载导致的变化,必须由开发人员确定是否是正常的(不用管)
7. 处理高方差
- 假设前提是相同时间对应相同路径,所以高方差不可。
8.2 注意:比较一个东西加入前后的差异,得知道前后
NSDI11-Spectroscope-Diagnosing performance changes by comparing request flows相关推荐
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
http://www.cnblogs.com/alan777/p/6135703.html Unity性能优化(2)-官方教程Diagnosing performance problems using ...
- 基于多源数据画像的失败用例智能分析
摘要:云原生分布式系统和DevOps开发模式下微服务上线节奏快,按周/按天/按需发布,失败用例的定位分析耗时达数小时或数天,无法满足快速质量反馈的诉求. 本文分享自华为云社区<华为云基于多源数据 ...
- Use Data Caching Techniques to Boost Performance and Ensure Synchronization(转)
原文地址 Level of Difficulty 1 2 3 SUMMARY Performance is an important concern for any application, but ...
- 【阅读】A Comprehensive Survey on Distributed Training of Graph Neural Networks——翻译
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] (本文中,涉及到公式部分的翻译不准确,请看对应原文.) 另一篇:[阅读]Distributed Graph Neural Networ ...
- 12c expdp ORA-31623 -又遇到BUG
一.环境描述 12.1.0.2 RAC 二.详细过程 昨天做了一个12c RAC环境的expdp备份操作,结果出现报错,查看了官网竟然是BUG. 1.报错信息 UDE-31623: operation ...
- (转)使用 db2pd 命令进行监视和故障诊断
原文:https://www.ibm.com/support/knowledgecenter/zh/SSEPGG_9.7.0/com.ibm.db2.luw.admin.trb.doc/doc/c00 ...
- Corda ledger技术性白皮书原文和翻译
这次是跟着白皮书贴一点就翻译一点. Abstract A decentralised database with minimal trust between nodes would allow for ...
- azure多功能成像好用吗_如何使用Azure功能处理高吞吐量消息
azure多功能成像好用吗 Authored with Steef-Jan Wiggers, Azure MVP. 由Azure MVP Steef-Jan Wiggers撰写. With Micro ...
- 10步骤优化SQL Server 数据库性能
作者从基础的数据库索引开始全面讲述了SQL Server数据库应用程序的性能优化,包括数据库设计和数据访问代码.系列文章如下: Top 10 steps to optimize data access ...
最新文章
- go--基本数据类型
- 推荐30个用于微服务的顶级工具
- 5脚12v继电器接线图解_【电器元件002】你真的懂汽车继电器么
- html 字符串最后加空格,js给字符串每个字符中间加空格
- sql获取某列出现频次最多的值_那些SQL里面踩过的坑
- 编写有效用例_阅读笔记03
- 简单的 socket 代码
- SQL数据库有密码的话,就会弹出那个对话框
- TiDB 源码阅读系列文章(二十)Table Partition
- HTML5代码雨程序
- 集合中某几个数字之和等于一个固定值 java
- html5锥形,Three.js HTML5 3D开发实例 - 彩色圆锥体
- 以下对python程序设计风格_以下对 Python 程序设计风格描述正确的选项是( )
- 详细介绍,驱动IC的功能和作用
- 人人都能学会的英语5:读写
- 5G+智慧文旅解决方案
- 2020-08-15 java 8 LocalDateTime 20 例(有更新)
- Java 类加载机制
- 各大厂商手机设置程序后台运行
- 人狼羊菜问题的简单实现