0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

P99是如何计算的

jf_ro2CN3Fa 来源:www.kawabangga.com /posts/4284 2023-01-29 15:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Latency(延迟)是我们在监控线上的组件运行情况的一个非常重要的指标,它可以告诉我们请求在多少时间内完成。监控 Latency 是一个很微妙的事情,比如,假如一分钟有 1亿次请求,你就有了 1亿个数字。如何从这些数字中反映出用户的真实体验呢?

之前的公司用平均值来反应所有有关延迟的数据,这样的好处是计算量小,实施简单。只需要记录所有请求的一个时间总和,以及请求次数,两个数字,就可以计算出平均耗时。

但问题是,平均耗时非常容易掩盖真实的问题。比如现在有 1% 的请求非常慢,但是其余的请求很快,那么这 1% 的请求耗时会被其他的 99% 给拉平,将真正的问题掩盖。

所以更加科学的一种监控方式是观察 P99/P95/P90 等,叫做 Quantile。简单的理解,P99 就是第 99% 个请求所用的耗时。假如 P99 现在是 10ms,那么我们可以说 “99% 的请求都在 10ms 内完成”。虽然在一些请求量较小的情况下,P99 可能受长尾请求的影响。但是由于 SRE 一般不会给在量小的业务上花费太多精力,所以这个问题并不是很大。

但是计算就成了一个问题。P99 是计算时间的分布,所以我们是否要保存下来 1 亿个请求的时间,才能知道第 99% 的请求所用的时间呢?

这样耗费的资源太大了。考虑到监控所需要的数据对准确性的要求并不高。比如说 P99 实际上是 15.7ms 但是计算得到数据是 15.5ms,甚至是 14ms,我认为都是可以接受的。

我们关注更多的是它的变化。“P99 耗时从 10.7ms 上涨到了 14ms” 和 “P99耗时从 11ms 上涨到了 15.5ms” 这个信息对于我们来说区别并不是很大。(当然了,如果是用于衡量服务是否达到了服务等级协议 SLO 的话,还是很大的。这样需要合理地规划 Bucket 来提高准确性)。

所以基于这个,Prometheus 采用了一种非常巧妙的数据结构来计算 Quantile: Histogram

Histogram 本质上是一些桶。举例子说,我们为了计算 P99,可以将所有的请求分成 10 个桶,第一个存放 0-1ms 完成的请求的数量,后面 9 个桶存放的请求耗时上区间分别是 5ms、10ms、50ms、100ms、200ms、300ms、500ms、1s、2s,这样只要保存 10 个数字就可以了。

要计算 P99 的话,只需要知道第 99% 个数字落在了哪一个桶,比如说落在了 300ms-500ms 的桶,那我们就可以说现在的 99% 的请求都在 500ms 之内完成(这样说不太准确,如果准确的说,应该是第 99% 个请求在 300ms – 500ms 之间完成)。这些数据也可以用来计算 P90、P95 等等。

由于我们的监控一般是绘制一条曲线,而不是一个区间。所以 P99 在 300-500 之间是不行的,需要计算出一个数字来。

Prometheus 是假设每一个桶内的数据都是线性分布的,比如说现在 300-500 的桶里面一共有 100 个请求,小于300个桶里面一共有 9850 个请求。所有的桶一共有 1万个请求。

那么我们要找的 P99 其实是第 10000 * 0.99 = 9900 个请求。第 9900 个请求在 300-500 的桶里面是第 9900 – 9850 = 50 个请求。根据桶里面都是线性分布的假设,第 50 个请求在这个桶里面的耗时是 (500 – 300) * (50/100) = 400ms,即 P99 就是 400ms。

可以注意到因为是基于线性分布的假设,不是准确的数据。比如假设 300-500 的桶中耗时最高的请求也只有 310ms,得到的计算结果也会是 400ms。桶的区间越大,越不准确,桶的区间越小,越准确。

写这篇文章,是因为昨天同事跑来问我,“为啥我的日志显示最慢的请求也才 1s 多,但是这个 P999 latency 显示是 3s?”

我查了一下确实如他所说,但是这个结果确实预期的。因为我们设置的桶的分布是:10ms、50ms、100ms、500ms、1s、5s、10s、60s。

如上所说,Prometheus 只能保证 P999 latency 落在了 1s – 5s 之间,但不能保证误差。

如果要计算准确的 Quantile,可以使用 Summary 计算。简单来说,这个算法没有分桶,是直接在机器上计算准确的 P99 的值,然后保存 P99 这个数字。但问题一个是在机器本地计算,而不是在 Prometheus 机器上计算,会占用业务机器的资源;另一个是无法聚合,如果我们有很多实例,知道每一个实例的 P99 是没有什么意义的,我们更想知道所有请求的 P99。显然,原始的信息已经丢失,这个 P99 per instance 是无法支持继续计算的。

另外一个设计巧妙的地方是,300-500 这个桶保存的并不是 300-500 耗时的请求数,而是 <500ms 的请求数。也就是说,后面的桶的请求数总是包含了它前面的所有的桶。这样的好处是,虽然我们保存的数据没有增加(还是10个数字),但是保存的信息增加了。假如说中间丢弃一个桶,依然能够计算出来 P99,在某些情况下非常有用,比如监控资源不够了,我们可以临时不收集前5个桶,依然可以计算 P99。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 监控
    +关注

    关注

    6

    文章

    2364

    浏览量

    59093

原文标题:P99 是如何计算的?

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    想快速打造共享咖啡机方案?乐鑫科技ESP32-P4+摄像头方案开源了!烧录演示已备好!

    向大家展示了WT99P4C5-S1开发板在共享咖啡机中的应用案例。本期我们就为大家进行共享咖啡机烧录演示。材料准备本次演示开发板采用启明云端自研WT99P4C5-S1开发板,该开发板搭载乐鑫
    的头像 发表于 11-13 18:03 423次阅读
    想快速打造共享咖啡机方案?乐鑫科技ESP32-<b class='flag-5'>P</b>4+摄像头方案开源了!烧录演示已备好!

    STMicroelectronics L99H02QF评估板技术解析与应用指南

    STMicroelectronics L99H02QF评估板设计用于汽车应用中的直流电机控制。L99H02QF由主板和子板组成,子板上预装有L99H02QF。主板基于STM8A微控制器,提供逻辑部分
    的头像 发表于 10-30 15:00 277次阅读
    STMicroelectronics L<b class='flag-5'>99</b>H02QF评估板技术解析与应用指南

    ‌基于L99VR01STR的汽车级LDO评估板技术解析与应用指南

    STMicroelectronics AEK-POW-LDOV01S评估板配置用于评估L99VR01STR的运行情况。L99VR01 LDO线性稳压器可提供高达200mA负载电流,在稳压器禁用时消耗
    的头像 发表于 10-28 14:22 295次阅读
    ‌基于L<b class='flag-5'>99</b>VR01STR的汽车级LDO评估板技术解析与应用指南

    risc-v P扩展(一) P指令集简介

    解码、医学成像、计算机视觉、嵌入式控制、机器人技术、人机界面等。 P指令集扩展提高了RISC-V CPU IP产品的DSP算法处理能力。随着RISC-V P指令集扩展的增加,RISC-Vcpu现在可以以
    发表于 10-23 07:40

    ‌STMicroelectronics L99VR03汽车级LDO稳压器深度解析与技术应用指南

    STMicroelectronics L99VR03线性稳压器专为待机微处理器控制单元系统而设计,特别适用于汽车应用。当稳压器被禁用时,LDO提供高达300mA的负载电流,静态电流低至800nA,无
    的头像 发表于 10-15 11:27 508次阅读
    ‌STMicroelectronics L<b class='flag-5'>99</b>VR03汽车级LDO稳压器深度解析与技术应用指南

    【HD300I 】青翼凌云科技基于昇腾 310P 的全国产化智能计算模组

    HD300I 是一款基于昇腾 310P 的全国产化智能计算模组。该模 组将昇腾 310P 芯片集成在了一个 140*80mm 的板卡上,可以作为一 个紧凑的核心模块,进行功能的扩展,能够快速搭建起一个 AI 边缘智 能
    的头像 发表于 09-24 19:45 1720次阅读
    【HD300I 】青翼凌云科技基于昇腾 310<b class='flag-5'>P</b> 的全国产化智能<b class='flag-5'>计算</b>模组

    EQ -99XLDLS®紧凑,经济,高亮度宽带光源介绍

    照亮纳米级区域 EQ-99X LDLS 是一种超高亮度、高稳定性的宽带光源,非常适合小型光展量光学器件。 EQ-99X 专为要求苛刻的成像和光谱应用而设计,具有出色的空间和功率稳定性,可在宽光谱
    的头像 发表于 08-06 09:36 327次阅读
    EQ -<b class='flag-5'>99</b>XLDLS®紧凑,经济,高亮度宽带光源介绍

    protel 99 se的设计管理器找不到

    求哪位高手指点一下,我打开protel 99 se时,窗口上不显示设计管理器,点击Design Manager和图标都不行,重新从网上下载protel 99 se也是打不开。
    发表于 07-11 10:25

    Texas Instruments SN74AC3G99/SN74AC3G99-Q1多功能门特性/应用/框图

    Texas Instruments SN74AC3G99/SN74AC3G99-Q1超级可配置多功能门包含三个具有三态输出的独立可配置逻辑门。每个门具有四个输入,可执行布尔函数Y =(A•C+B•C
    的头像 发表于 07-07 15:16 500次阅读
    Texas Instruments SN74AC3G<b class='flag-5'>99</b>/SN74AC3G<b class='flag-5'>99</b>-Q1多功能门特性/应用/框图

    RMS RESOLUTION和P-P reolution的计算公式是什么?

    在进行AD7176-2的精度测试时,将输入端接作为测试输入信号,但是发现每次改变样本个数精度都会发生改变,这是为什么,RMS RESOLUTION是如何计算得到的呢?
    发表于 04-15 08:17

    AD2S99可编程振荡器技术手册

    AD2S99是一款可编程正弦振荡器,能够为旋变器和各种交流变换器提供正弦波激励。 AD2S99还提供一个相位锁定至其SIN和COS输入的同步参考输出信号(3 V p-p方波)。在应用中,SIN
    的头像 发表于 04-02 17:33 770次阅读
    AD2S<b class='flag-5'>99</b>可编程振荡器技术手册

    【新品】ESP32-P4全功能开发板,启明云端WT99P4C5-S1多媒体开发板强势来袭!

    为了满足广大开发者对于高性能、多功能开发平台的需求,深圳市启明云端有限公司重磅推出了基于WT0132P4-A1核心板设计的多媒体开发板——WT99P4C5-S1。这款开发板集成了乐鑫ESP32-P
    的头像 发表于 03-18 18:06 1736次阅读
    【新品】ESP32-<b class='flag-5'>P</b>4全功能开发板,启明云端WT<b class='flag-5'>99P</b>4C5-S1多媒体开发板强势来袭!

    DAC161P997两路同时输出就不对,为什么?

    各位高手,请教一下,我单独调试一路DAC161P997都正常,原理图和程序都是按照demo板设计的,这个应该没有问题,但是两路同时输出不对,目前两路DAC161P99都是采用同一电源供电,如果我
    发表于 02-06 07:19

    将信号引入DS99R104 ,DS99R104没有输出反应,为什么?

    第一次使用这个转换芯片,103端时钟信号都输进去了,DOUT端也可以测量到信号输出,但是怎么判断信号输出的正确呢?我将信号引入DS99R104 ,DS99R104没有输出反应,求专家或用过的这类芯片的大神解答!!
    发表于 12-20 08:31

    CBM99D57BQ

    CBM99D57 可在多种高端通信系统中实现I/Q 调制器和上变频器功能。CBM99D57 内部集成了高速直接数字频率合成器(DDS)、高速 14 位数模转换器(DAC)、时钟倍频电路、数字滤波器
    发表于 12-13 15:05 0次下载