服务响应时间与分布

https://zhuanlan.zhihu.com/p/62329762
分析服务响应时间分布,如:均值、中位值、P95值、P99值等如何计算
背景

最近看得多,写得少,所谓

学而不思则罔,思而不学则殆

还是得记录笔记,以加强理解。

有篇博客提到服务响应时间各种值之优劣,特记录之。
平均值

我们考察一个服务器的性能,除了QPS数据外,还会考察响应时间,当服务器负载增高时,往往会伴随着响应时间的增长,但是这个值该如何度量,以精准的表现服务器当前之负载呢?

最常用的值为平均值,表示服务的平均响应时间,通过该值我们能够知道服务当前响应的所有请求耗时的平均值。 例如平均耗时为100ms,表示服务器当前请求的总耗时/请求总数量,通过该值,我们大体能知道服务运行情况。 但是对于具体有多少个请求的耗时比100ms要大,大多少,是200ms,还是500ms,还是1000ms,我们无从得知。 而且,平均值这个数据容易掩盖一些异常值问题,比如,我的财富加马云财富的平均值也能过亿,所以,平均值这个数据项过于简单,提供的信息量太少。

那为什么我们通常采用平均值来衡量或者监控服务性能呢?

主要是由于该值容易计算,采用两个变量S、N,即可持续计算平均值:

S = S + X
N = N + 1
V = S/N

通过该公式,当有新的耗时值X需要考量,很方便的就能算出平均值,就算QPS到几十万/s,也不在话下。

注意,该公式有个隐含问题,即是S增长过快问题,如果QPS过高,X值过大,很容易导致S溢出,从而导致结果计算异常。

可将该公式做如下改造:

Vs = S/N
Vn = (S+X)/(N+1) = (Vs*N+X)/(N+1) = Vs + (X - Vs)/(N+1)

该算法也只需要两个变量,未考量数据X时——平均值Vs、数据个数N 但是,该算法由于不累加S,而只累加N,而N的增长极慢,不易导致溢出问题。
中位值

如上所述,由于平均值不能反映数据分布及极端异常值的问题,可以考虑采用中位值来作为度量。

中位值如何计算?

我们假设某服务在1s内响应了100个请求,耗时为X1、X2 … X100,可以对这100个数按照从小到大的顺序进行排序,在排序后的列表的中间位置的值——即为中位值,假设为150ms。

那这个值,150ms,表示什么意思呢? 它表示,服务器响应的这100个请求里面有50个的请求耗时小于150ms,另有50个请求的耗时大于150ms。

如果,我们有一个服务qps为3万/s,经过计算响应耗时中位值为100ms,那么我们可以推断有1.5万个请求的耗时小于100ms,也就是说我们有一半的用户的响应耗时小于100ms,据此我们就可以评估服务响应性能是否可以满足业务要求。

但是,这个中位值还有另外一个问题,我们只知道还有一半的请求耗时大于100ms,具体是大多少,大200ms,还是500ms,我们无法得知。
P95值与P99值

由于中位值只能反映中位数的问题,不能反馈更多信息,例如,我想知道该服务80%的请求耗时在多少ms以内,这些问题需要额外的数据指标。

P95——响应耗时从小到大排列,顺序处于95%位置的值即为P95值。

还是采用上面那个例子,100个请求按照响应时间从小到大排列,位置为95的值,即为P95值。 我们假设该值为180ms,那这个值又表示什么意思呢?

意思是说,我们对95%的用户的响应耗时在180ms之内,只有5%的用户的响应耗时大于180ms,据此,我们掌握了更精确的服务响应耗时信息。
P99.9值

亚马逊经常采用P99.9值,也就是99.9%用户耗时作为指标,也就是1000个用户里面,999个用户的耗时上限,如果测量与优化该值,即可保证绝大多数用户的使用体验。 至于P99.99值,优化成本过高,而且服务响应由于网络波动、系统抖动等不能解决之情况,故暂不考虑该指标。
如何计算P分位值

如上说过平均值的计算方式,而P值需要将响应耗时从小到大排序,然后取得对应百分位之值。

如果服务qps较低,例如:100/秒,记录这100个耗时数据,然后排序,然后取得P分位值,倒不是难事。 而如果qps较高,例如:30万/秒,如果还是采用记录+排序的方式,可以预见需要消耗大量内存与计算资源。

有没有简单的计算方式呢?

可以采用直方图来进行计算,该计算方式虽不是完全准确值,但精度非常高,误差较小。

直方图需要界定两个直方之间的跨度,一般采用等分形式,例如对于耗时统计需求,我们可以假定一个耗时上界,然后等分,比如划分成100个区间,对于每个响应耗时落入对应的直方,如下图:

这样就避免了对全部数据进行排序,只需要根据各个直方中的数据数量,即可计算出95%位置位于哪个直方,然后在该直方内部采用插值方法,计算出P95值。

另外,考虑到数据分布特点,服务耗时异常数据应该只是少数,但是异常值跨度可能很大,大部分耗时数据均靠近正常值,如果直方统计采用等分形式,会导致大量数据堆积在一个直方中,如何解决这个问题?

可以采用非等分的跨度划分方式,例如采用指数形式划分,耗时越低的区间,跨度越小,精度约高。

服务响应时间与分布 P95 P99相关推荐

  1. 服务响应时间与分布(p99指标)

    分析服务响应时间分布,如:均值.中位值.P95值.P99值等如何计算 平均值 我们考察一个服务器的性能,除了QPS数据外,还会考察响应时间,当服务器负载增高时,往往会伴随着响应时间的增长,但是这个值该 ...

  2. pps服务器未响应_服务响应时间与分布

    分析服务响应时间分布,如:均值.中位值.P95值.P99值等如何计算 背景 最近看得多,写得少,所谓 学而不思则罔,思而不学则殆 还是得记录笔记,以加强理解. 有篇博客提到服务响应时间各种值之优劣,特 ...

  3. P95、P99.9百分位数值——服务响应时间的重要衡量指标

    前段时间,在对系统进行改版后,经常会有用户投诉说页面响应较慢,我们看了看监控数据,发现从接口响应时间的平均值来看在500ms左右,也算符合要求,不至于像用户说的那么慢,岁很费解,后来观察其它的一些指标 ...

  4. php分布式微服务开发_分布式微服务架构

    学习.跳槽涨薪?请关注 随着业务的不断发展, 用户体量的快速扩张. 从单体/垂直架构转移到分布式/微服务架构是自然而然的选择. 01 分布式理论 分布式理论是分布式系统的基础, 在任何情况下分布式系统 ...

  5. 分布式微服务学习总结——分布式微服务概述

    文章目录 一.前言 二.一个传统的App发展进程 三.为什么要用分布式微服务? 四.什么是分布式.微服务? 1.微服务是什么? 2.微服务架构是什么? 3.分布式是什么? 4.微服务架构和分布式的关系 ...

  6. java响应很慢排插_服务响应时间慢:Java SecureRandom和/ dev / random - java

    我正在尝试调试Tomcat上部署的应用程序提供的一些慢速响应. 现在,我主要关注SecureRandom和/dev/random(其他一些可能的原因已被调查并排除). 模式如下: 第一个调用恰好在To ...

  7. 如何使用 Kubernetes 监测定位慢调用

    监控作者:李煌东 大家好,我是阿里云的李煌东.今天我为大家分享 Kubernetes 监测公开课第四节,如何使用 Kubernetes 监测定位慢调用.今天的课程主要分为三大部分,首先我会介绍一下慢调 ...

  8. 基于docker 如何部署surging分布式微服务引擎

    1.前言 转眼间surging 开源已经有1年了,经过1年的打磨,surging已从最初在window 部署的分布式微服务框架,到现在的可以在docker部署利用rancher 进行服务编排的分布式微 ...

  9. springboot怎么杀进程_线上服务平均响应时间太长,怎么排查?

    线上服务平均响应时间太长,怎么排查? https://xie.infoq.cn/article/914b5c56000a3880016abd8d6 前言: 最近线上环境某个接口服务响应时间偏长,导致用 ...

最新文章

  1. Python数据科学-技术详解与商业实践视频教程
  2. linux tar压缩排除某个文件夹或者文件
  3. cannot find any entry in order attachment link
  4. Spring Data Solr教程:配置
  5. 三星Galaxy Z Flip 3渲染图:更窄边框 铰链升级
  6. java 的记住用户名和密码,JAVA--高级基础开发Cookie实现记住用户名和密码
  7. 2018 n1ctf easy_hard_php 攻击流程图
  8. 【Access2007】将Excel表导入至Access2007的当中一张已存在的表之中
  9. MES系统是什么?MES系统的主要功能是什么?看完本文就知道
  10. 计算机网络原理最详细解说
  11. 路由器连接、静态路由配置实例
  12. 面试题:用两个栈实现一个队列 Java语言实现
  13. cad文字递增快捷键_cad文字修改快捷键是什么,Auto CAD文字修改快捷键是什么?
  14. 考研英语二重要词汇整理
  15. How to Register/Update Ad Muncher using TOR
  16. 家用汽车维修3:基于OBDII的故障分析
  17. 7.7 Introduce Foreign Method 引入外部方法
  18. python3爬虫数据清洗与可视化实战pdf百度云_Python 3爬虫、数据清洗与可视化实战_PDF电子书...
  19. 从来不是别人的不幸和痛苦
  20. 30秒教会您Orange一键资源采集功能

热门文章

  1. ElasticSearch、kibana、ik、pinyin下载安装
  2. 2022年软件测试还能不能干?看看平均薪资你就懂了
  3. 解决插入U盘不显示盘符问题,最有效,最简单!!!
  4. animate.ccss_引入CCSS(组件CSS)
  5. java 学习心得笔记
  6. OpenJudge小组NOI / 1.1编程基础之输入输出10:超级玛丽游戏(C++C语言Python)
  7. (转贴)佛祖说出的爱情箴言
  8. SAP Hardcode(硬码)的处理方法
  9. 网吧40台无盘服务器的配置,带80-120台的网咖无盘服务器配置 | 专业网吧维护
  10. 2021年高处安装、维护、拆除报名考试及高处安装、维护、拆除考试试卷