azure - 为什么 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%
下面的下一张图片显示了今天早上同一时间范围内的流量分布... 第 4 个实例处理的流量比下一个最近的实例多 250%,比实例 1 多 600%
11,980 21,671 34,180 85,041 24,508
7% 12% 19% 48% 14%
解决方案
不幸的是,您对扩展应用程序时使用的负载均衡器没有任何权力。据我所知,它是不可配置的,应该随机将请求发送到实例。
虽然,从所附图表来看,您的分布在第一个图表中非常平衡。当然你提出的第二天有一个明显的问题,但我可以想象这只是暂时的。
随机性包括统计数据,从统计数据来看,更多请求可能会在较小的时间窗口(有限抽样)内发送到您的实例之一。
我建议您获取更多有关负载平衡的示例,因为只有两天是不够的。我很确定你收集的数据越多,你就会看到曲线收敛的越多。
我可以理解 SLA 是一个问题,因此我建议升级到另一层,以便更快地满足您的请求。
推荐阅读
- powershell - Powershell,无法输入带有一些非 ASCII 字符的哈希表键(在脚本中)
- postgresql - 在 postgres 的模式中查找每个表上的行数
- ms-access - MS Access - 使用 GROUPBY 查询 - 显示具有零值的组
- git - git cmd / github桌面上的所有最新错误
- docker - 多个容器之间的 Docker 命名卷
- function - 需要一个类型为 'a * 'b -> 'b -> 'a 的函数
- python - “r.start 不是函数” Fermipy Conda 错误
- scala - Spark 3.0 读取 json 文件比 Spark 2.4 慢得多
- regex - 能够在 .htaccess 测试站点中成功重写 URL,但是在 localhost 或实时站点中使用相同的代码时不起作用
- asp.net-identity - 使用 ASP.NET Identity 或 Identity Server 4 使用本机应用程序进行 Facebook 登录