一个慢实例怎么拉高整个服务的 p99?对冲请求(hedging)能压多少尾延迟,又要多发多少请求?负载高的时候会怎样?这篇用 5 个副本的模型量出来。
情况 | p50 | p90 | p99 | p99.9 | 发给副本 0 的请求比例 ----------------+-------+--------+--------+--------+------------- 全部正常 · 随机 | 47 ms | 63 ms | 74 ms | 92 ms | 18% 1 个慢节点 · 随机 | 49 ms | 128 ms | 178 ms | 211 ms | 17% 1 个慢节点 · 挑在途最少的 | 48 ms | 96 ms | 161 ms | 177 ms | 10%
一个慢节点把 p99 拉高而中位数几乎不变;挑在途最少的副本能少发一些给它,但不能消除。
对冲 delay | p50 | p99 | p99.9 | 额外请求 ---------+-------+--------+--------+------ 不对冲 | 49 ms | 181 ms | 230 ms | 0.0% 60 ms | 50 ms | 135 ms | 145 ms | 27.8% 100 ms | 49 ms | 160 ms | 164 ms | 15.0% 150 ms | 48 ms | 180 ms | 204 ms | 2.6% 250 ms | 49 ms | 185 ms | 216 ms | 0.0%
delay 越短尾延迟越低,额外请求越多;delay 比大多数请求耗时还短时额外请求接近三成。
到达速率 | 对冲 | p50 | p99 | p99.9 | 额外请求 ------+--------+---------+---------+---------+------ 100/s | 不对冲 | 47 ms | 434 ms | 593 ms | 0.0% 100/s | 100 ms | 47 ms | 158 ms | 181 ms | 3.4% 250/s | 不对冲 | 54 ms | 505 ms | 593 ms | 0.0% 250/s | 100 ms | 54 ms | 162 ms | 220 ms | 9.5% 400/s | 不对冲 | 482 ms | 1876 ms | 2907 ms | 0.0% 400/s | 100 ms | 3566 ms | 5754 ms | 7747 ms | 97.7%
排队让大多数请求超过 delay,几乎每个请求都发第二份,把容量吃掉,延迟比不对冲更差。