在系统工程中,尾部延迟——即最慢请求所经历的延迟——通常主要被讨论为客户体验问题。然而,Amazon Web Services (AWS) 的工程师 Marc Brooker 认为,尾部延迟对于容量规划和成本管理同样至关重要。通过应用经验 Lorenz 曲线,Brooker 证明了在许多服务中,极小比例的高延迟请求可能占据系统总平均延迟的巨大比例,并由此推导出其对并发要求的贡献。
为了量化这一点,Brooker 利用经验 Lorenz 曲线来计算 $L(P)$,它代表了短于特定百分位 $P$ 的请求所贡献的平均延迟比例。例如,如果一个服务的 p99 延迟为 100ms,该曲线可帮助确定超过该阈值的请求驱动了多少总平均延迟。Brooker 提供了一个 Python 实现,通过在测得的分位数之间进行插值来估算这一比例。在他的示例中,他展示了对于某些分布,处于或高于中位数 (p50) 的请求可能贡献近 99% 的平均延迟,而处于或高于 p99 的请求仍可能贡献超过 50%。
这些数字的重要性与 Little 定律相关,该定律将稳态系统中的平均项目数量与其平均等待时间和到达率联系起来。Brooker 解释说,尾部贡献的平均延迟份额也是这些慢请求所占用的系统并发份额。在一个简单的线程系统中,如果尾部贡献了 75% 的平均延迟,那么 75% 的繁忙线程就被高延迟请求占用。这表明优化尾部不仅仅是为了改善用户体验;它还可以通过释放目前被“沉重”请求占用的系统资源,显著降低容量需求、减少锁竞争并降低整体运营成本。
虽然该分析提供了一个极具说服力的成本感知优化框架,但 Brooker 指出了某些技术限制。提供的计算依赖于特定的插值和外推方法(如幂律插值),这些方法可能会根据数据的密度以及其与 Pareto 分布的拟合程度而有所不同。此外,由于该分析是使用监控指标事后进行的,它衡量的是*将*以高延迟完成的请求,这可能与对当前正在处理的请求的实时观测略有不同。尽管存在这些细微差别,核心结论依然成立:由于尾部服务的成本不成比例地高,它们往往是系统成本的主要驱动因素,应当成为优化工作的核心焦点。
该分析强调了一种视角转变:与其将尾部延迟视为可忽略的离群值,不如将其视为资源消耗的主要驱动因素。通过识别每个百分位的具体“成本”,工程师可以在性能和基础设施支出之间做出更明智的权衡。这种方法超越了“快与慢”的二元对立,并为优先考虑哪些特定延迟区间在系统扩展中提供最高投资回报提供了数学基础。
