📊 直方图 vs 摘要:你的选择是?服务器还是客户端,这是一个问题!

大家好!今天,我们将深入探讨在监控系统,特别是像Prometheus这样的系统中,经常使用的两种重要指标类型——直方图(Histogram)和摘要(Summary)之间的关键区别。

两者都用于测量请求延迟(request latency)或响应大小(response size)等值的分布,但它们的操作方式存在一个非常重要的差异。那就是,计算在哪里进行!🤔


🚀 核心区别:计算的主体

开门见山地说,两者的最大区别如下:

  • 直方图 (Histogram):数据收集和计算在服务器端(Server-side)进行。 🖥️
  • 摘要 (Summary):数据计算在客户端(Client-side)进行。 💻

为什么这个简单的区别如此重要?现在让我们详细探讨一下。

🖥️ 直方图 (Histogram):借助服务器的力量!

直方图是一种客户端(您的应用程序)将观测到的值直接发送到服务器(例如:Prometheus服务器)的方式。

它是如何工作的?

  1. 客户端 (应用程序) 💻:每次收到请求时,测量响应时间(例如:150ms)。
  2. 传输测量值:将这个150ms的值直接发送到服务器。客户端不进行复杂的计算!
  3. 服务器 (Prometheus) 🖥️:服务器拥有预定义的“桶(bucket)”。例如,(0-100ms, 100-200ms, 200-300ms, …)这样的区间。
  4. 服务器端计算:服务器根据从客户端收到的150ms值,将“100-200ms”桶的计数增加1。
  5. 分位数计算:基于所有收集到的桶数据,服务器直接估算并计算百分位数(Quantile,例如:99%, 95%)。

优点 👍

  • 低客户端负载:客户端只需发送测量值,因此几乎没有CPU或内存负担。轻巧快速! 🕊️
  • 灵活的聚合(Aggregation):可以将在服务器端从多个客户端(实例)收集到的数据进行汇总,计算整个服务的分位数。您将得到整个(A+B)服务器的99%,而不是A服务器的99% + B服务器的99%。这是直方图最强大的优势! 💯
  • 自由查询:基于收集到的数据,服务器可以方便地进行各种条件查询和分析。

缺点 👎

  • 精度限制:由于使用预定义的桶,百分位数计算是近似值,而非精确值。桶的范围越宽,误差可能越大。

💻 摘要 (Summary):客户端直接解决!

摘要是一种客户端(应用程序)直接计算分位数,然后将结果值发送到服务器的方式。

它是如何工作的?

  1. 客户端 (应用程序) 💻:在一定时间内,自行存储所有传入请求的响应时间值。(例如:[120ms, 150ms, 90ms, 210ms, …])
  2. 自行计算:客户端根据这些数据,直接准确地计算分位数(例如:99%是210ms,50%是135ms)。
  3. 发送结果:将计算完成的结果值(quantile=”0.99″, value=”210″)发送到服务器。

优点 👍

  • 高精度:由于客户端直接使用所有测量值进行计算,百分位数非常准确。 ✅
  • 直观结果:可以清晰地设置和查看所需的分位数(p50, p90, p99等)。

缺点 👎

  • 高客户端负载:需要在一定时间内将所有测量值保存在内存中,并计算分位数,因此CPU和内存使用量较高。 😥
  • 无法聚合(Aggregation):由于每个客户端都已将计算结果发送到服务器,因此无法将多个客户端的数据合并以计算整个服务的分位数。(对A服务器的99%和B服务器的99%取平均值在统计上没有意义。) ❌

🎯 一目了然的比较表

区分 直方图 (Histogram) 摘要 (Summary)
计算位置 服务器端 🖥️ 客户端 💻
客户端负载 低 (Low) 🕊️ 高 (High) 🐘
数据聚合 可能 (Possible) ✅ 不可能 (Impossible) ❌
分位数精度 近似值 (Approximate) 精确 (Accurate)
主要用途 整体服务指标 (例如: API响应时间) 单个实例的精确性能测量

✨ 那么,应该使用哪一个呢?

  • 在大多数情况下,推荐使用直方图。 🚀 在微服务架构等运行多个实例的环境中,了解整个服务的性能至关重要。直方图可以灵活地聚合数据,因此在测量SLO/SLA和监控整体服务健康状况方面更为有用。
  • 摘要仅在特殊情况下使用。 🎯 当绝对需要精确的分位数计算,并且多个实例之间的数据聚合不重要时,摘要是合适的。例如,当您想准确了解单个批处理(batch)作业的执行时间分布时,它会很有用。

现在,您是否清楚地理解了直方图和摘要之间的区别?在构建监控系统时,请根据您的情况选择正确的指标类型,以实现更有效的可观测性(Observability)!



Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注