什么是 P75 P90 P95 ?

在进行性能统计时常常会出现 P75 P90 P95 这样的数值:

它们是百分位数度量。百分位数展现的是具体百分比下观察到的数值。例如,第95个百分位上的数值,是高于 95% 的数据总和。

百分位数通常用来找出异常。在统计学的正态分布下,第 0.13 和 第 99.87 的百分位数代表与均值距离三倍标准差的值。任何处于三倍标准差之外的数据通常被认为是异常值,因为它与平均值相差太大。

我们要监控网站的延时来判断响应是否能保证良好的用户体验时,一个常用的度量方法就是平均响应延时。 但这并不是一个好的选择(尽管很常用),因为平均数通常会隐藏那些异常值, 中位数有着同样的问题。 我们可以尝试最大值,但这个度量会轻而易举的被单个异常值破坏。因此我们才需要使用百分位数度量。

近似算法

同布隆过滤器 Bloom Filter、HyperLogLog 等算法一样,TDigest 算法可以用来快速估算百分位的值(由 Ted Dunning 在 Computing Extremely Accurate Quantiles Using T-Digests 里面提出的),即使有几十亿数据分布在几十个节点时,用该算法也可以快速估算出百分位的值。Elastic Search 就是使用该算法进行计算的 https://www.elastic.co/guide/cn/elasticsearch/guide/current/percentiles.html