Metrics p50 p99

Metrics p50 p99

服务响应时间百分位

服务响应时间

在服务QPS上去后响应时间就变成一项衡量服务性能的重要标准,在网络链路稳定的前提下能反映出用户实际使用中服务的接口情况。对服务响应时间的衡量指标有Min(最小响应时间)、Max(最大响应时间)、Avg(平均响应时间)等,到底哪一项才能反映用户真实的情况呢?

百分位数值是一个统计学中的术语:如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数。

P50(Avg平均)

一说起平均就想起日常经常公布的人均收入多少,每次都要看看自己是不是拖后腿了,有超过平均线的,也有低于平均线的,平均值会把这些异常的指标平均掉。用Avg平均响应时间是无法衡量后端服务性能的,对应中位数是P50阈值,表示 50% 的事务持续时间大于阈值。例如,如果 P50 阈值设置为 10 毫秒,则 50% 的事务超过该阈值,耗时超过 10 毫秒。

P99

图里面记录服务响应时间P99是2s,实际上是指对于单位时间(30s)收集到的所有请求的响应时间统计,有1%的请求大于2s,99%的请求小于2s,通常情况下P99总比P50大很多(极端情况下1%的请求特别特大,有可能拉高P50),通过优化服务响应的P99就可以保证绝大多数用户的正常使用体验。

计算百分位

通常计算百分位的方法是取出某一段时间内比如1秒的全部请求的响应时间进行从小到大排序,取得对应的百分位数值。服务qps很低的话处理起来很快,如果qps较高还用这种方式的话会消耗大量的内存与CPU资源。从网上了解可以采用分桶方式来进行计算,即一个时间范围一个桶,每个请求的响应时间落到对应的时间范围桶,最后根据各个桶中的数据数量来得出响应时间的百分位时间范围,再对这个桶内的时间数据求平均得出来就是一个相对准确的百分位时间数据。

可以参考这一篇文章:P95、P99.9百分位数值——服务响应时间的重要衡量指标

我们服务的计算方法与这个类似,集成了自定义了一套metric-log组件,会计算服务设定时间内(比如10s)的全部请求响应时间的avg、p50、p95、p99等数据,发送到graphite做聚合再计算后就可以在grafana看到服务的整体响应时间p50、p99统计数据。

写在最后

通过服务响应时间的百分位数据可以真实反应出用户的请求状态,是提高用户体验的一个重要衡量指标,在日常工作中有很重要的地位。

留下回复

error: Content is protected !!