尾部延迟可能超过您的想法

2021-04-20 15:05:00

尾部延迟,也称为高百分点,指客户客户相当不经常看到的高延迟。像:"我的服务大多数在10毫秒响应,但有时需要大约100ms"世界上有许多原因的尾部延迟,包括争用,垃圾收集,丢包,主机故障和奇怪的东西操作系统在后台做。它'诱人看99.9百分位数,并觉得它不起作用。毕竟,1000个呼叫中的999个看起来比该延迟更低。

不幸的是,它'没有那么简单。一个原因是现代架构(如微服务和SOA)倾向于有很多组件,因此一个用户交互可以转换为许多,许多服务呼叫。这些系统中的常见模式是有些前端,这可能是服务或一些JavaScript或App,它调用了一些后端服务来执行它需要的工作。然后那些服务调用其他服务,等等。这形成了两种交互:并行扇出,服务调用许多后端并行,并等待全部完成,并且串行链接调用另一个服务,拨打另一个服务,拨打另一个服务。

理解为什么,让' s做一个简单的数值实验。让' s简化了世界,使所有服务以相同的延迟响应,并且延迟遵循一个非常简单的双峰分布:99%的时间为10ms(通常以2ms的标准偏差分布),以及1%的时间为100ms(和10ms)的平均值。在现实世界中,服务延迟几乎总是像这样的多模态,但通常不仅仅是正常分布的总和(但是这里没有重要)。

首先,让' s考虑并行呼叫。这里的逻辑很简单:我们并行调用n个服务,并等待最慢的一个。应用我们的直觉表明,随着n的增加,它变得越来越有可能' ll等待〜100ms慢呼叫。 n = 1,那个' ll发生在1%的时间左右。 n = 10,约10%的时间。在这个简单的模型中,基本的直觉是对的。这是它的样子:

尾部模式,用于非常罕见的尾部模式开始占据主导地位。什么是罕见的发生现在正常。几乎每个人都有糟糕的时间。

串行链有点有趣。在此模型中,服务呼叫服务,沿着链条。最终延迟是链条下所有服务延迟的总和,因此有很多案例才能考虑:1慢速服务,2次慢速服务等意味着我们可以期待分发的整体形状随着n的变化增加。由于中央限制定理,我们可以弄清楚,这看起来像n变大,但旅程也很有趣。

在这里,我们'重新模拟链长对两个不同世界延迟的影响。一条尾部世界,具有我们上面描述的双峰分布,而且没有尾部世界,只有10毫秒的主要分布。

同样,尾部延迟在这里变得更加突出。相对稀有的尾部增加了我们&#39的分布的变化

选择摘要统计信息方式,这应该影响您的思想,是如何选择要监控的延迟统计信息。事实是,没有摘要统计会给你完整的照片。看着直方图很酷,但往往会错过时间分量。你可以看一下某种窗口直方图热图,但可能赢得了' t。相反,确保您'重新了解服务延迟的高百分比,并考虑监控普通客户或客户使用情况并监控其结束延迟体验。

修剪的装置,Winsorized手段,截断的装置,狭义式范围,以及修剪分布的一些尾部的其他统计数据似乎是普及。有很多关于修剪的卑鄙和朋友的很多,但切断右尾部会导致你错过的是那个尾巴非常重要的效果,可能会取决于客户如何称呼您的服务。

我继续相信,如果你'重新衡量一件事,让它变得平均值。但是,你可能想要衡量多件事。