首页 > 解决方案 > 为什么 Azure 应用服务没有在实例之间均匀分配流量?

问题描述

我们的问题是 Azure 应用服务(S3 x 5 实例)没有在 5 个实例之间均匀分布请求。结果是一个实例被请求淹没,我们对该应用服务的整体 P50 和 P95 响应时间 SLA 被破坏。

我已确认应用服务已关闭 ARR Affinity。它是一个完全无状态的 Web API,因此它本身没有任何粘性。

下面的技术细节,但问题本质上是这样的

为什么 Azure 晚上不会在所有 5 个实例上分配/循环我的流量?

就目前而言,在这里扩大或扩大规模似乎没有意义,因为我最终会得到额外的昂贵实例闲置而 1 个实例被淹没。

技术细节

以下 2 个来自 6 月 1 日和 6 月 25 日的应用洞察图表显示了该问题。

requests
| where timestamp > datetime("2020-06-25 00:00:00")  
| where timestamp < datetime("2020-06-25 08:00:00")
//comaprison between 00:00-08:00 on June 1st vs. Today
| where url contains "**ommitted**" 
| project cloud_RoleInstance, itemCount, bin(timestamp, 1h)
| evaluate pivot(cloud_RoleInstance, sum(itemCount))
| render timechart

下面的第一张图片显示了 6 月 1 日的流量分布。不是完全分布但很接近。第 3 台服务器的流量比第 5 台服务器多 50%

34,708    26,436    38,313    30,617    24,355
22%       17%       25%       20%       16%

6月1日

下面的下一张图片显示了今天早上同一时间范围内的流量分布... 第 4 个实例处理的流量比下一个最近的实例多 250%,比实例 1 多 600%

11,980  21,671  34,180  85,041  24,508
7%      12%     19%     48%     14%

6月25日

标签: azureload-balancingazure-web-app-serviceazure-app-service-plansazure-load-balancer

解决方案


不幸的是,您对扩展应用程序时使用的负载均衡器没有任何权力。据我所知,它是不可配置的,应该随机将请求发送到实例。

虽然,从所附图表来看,您的分布在第一个图表中非常平衡。当然你提出的第二天有一个明显的问题,但我可以想象这只是暂时的。

随机性包括统计数据,从统计数据来看,更多请求可能会在较小的时间窗口(有限抽样)内发送到您的实例之一。

我建议您获取更多有关负载平衡的示例,因为只有两天是不够的。我很确定你收集的数据越多,你就会看到曲线收敛的越多。

我可以理解 SLA 是一个问题,因此我建议升级到另一层,以便更快地满足您的请求。


推荐阅读