Azure 负载平衡是否知道服务器 http 队列

Is Azure Load Balancing aware of servers http queue

我有一些非常沉重的报告。当给定的实例开始处理它时,它会很容易地消耗我的实例拥有的两个核心之一的 100%...如果该实例获得其中的 2 个,肯定会导致该实例无法处理任何其他请求大约 1 分钟...

我还有其他实例运行(通常是 4-6 个)。负载均衡器是否会选择实例 A 被阻塞的事实,并且在它处于这种负载下时不应向它发送请求?或者不是,负载均衡器平均分配请求?

您可以在负载均衡器上设置几种分配模式,请参阅 Configure the distribution mode for load balancer

从中可以看出link对系统有一定程度的粘性,称为5元组算法,因为它使用5个属性:源IP、源端口、目的IP、目的端口、协议类型。

您可以使用 PowerShell 命令手动切换到二元组或三元组模式 Set-AzureLoadBalancedEndpoint ... -LoadBalancerDistribution [opt]

在门户中,我相信此设置是由 "Load Balancing Rules" 部分中的 "Session Persistence" 属性 控制的,但选项不如 PowerShell 中可以实现的那样精细.

如您所见,这不是真正的循环模型。

您可以将探测器设置为通过原始 TCP(端口是否可连接)或 HTTP(我可以从 Web 服务器获得响应)来检查实时端点,因此在您的情况下最好的选择是依赖在 HTTP 探测器上检测您的端点响应速度不够快,并相应地路由流量。

绝对不是服务器上任何 HTTP 队列的 "aware" - 不要忘记负载平衡器不一定路由 HTTP 流量,您可能会使用各种各样的 Web 服务器。在所有可能的情况下都很难让 NLB 达到您所说的可见度。

Azure 负载均衡器是基于 TCP 和 UDP 流的负载均衡器,不处理应用层流量。负载平衡决策是根据新流做出的。负载均衡器使用散列函数来确定新流的分布。分布模式决定了计算哈希时要考虑的内容。

您的应用程序客户端的握手是直接与 VM 进行的。 Load Balancer 不知道您的 HTTP 请求,也不对它们进行排队。您需要查看用于此类处理的应用程序层负载均衡器,例如 Azure 应用程序网关。我不清楚这是否会解决您的问题;根本问题似乎是您不希望在实例繁忙时让流量到达。

就是说,您可以使用探测状态作为向负载均衡器发出您不希望接收更多流的信号的方式。您可以使用 HTTP 探测配置,并让您的应用程序通过使用 HTTP 200 以外的响应来发出探测失败信号,负载均衡器将停止向其发送新流。负载平衡到该实例的现有流不会终止并将继续。您不能使用探测器来发现虚拟机的负载;负载均衡器看不到您的 VM 的负载。