我有一些非常沉重的报告。当给定实例开始处理它时,它很容易会 100% 消耗我的实例拥有的两个核心之一...如果该实例获得其中 2 个,肯定会导致该实例无法处理任何其他请求大约1分钟...
我确实有其他实例正在运行(通常是 4-6 个)。负载均衡器是否会发现实例 A 已堵塞,并且在处于此负载下时不应向其发送请求?或者不,负载均衡器均匀分配请求?
最佳答案
Azure 负载均衡器是基于 TCP 和 UDP 流的负载均衡器,不处理应用程序层流量。负载平衡决策是根据新流做出的。负载均衡器使用哈希函数来确定新流的分配。分布模式决定了计算哈希值时要考虑的因素。
应用程序客户端的握手直接与虚拟机进行。负载均衡器无法识别您的 HTTP 请求,也不会对其进行排队。您需要查看应用程序层负载均衡器来进行此类处理,例如 Azure 应用程序网关。我不清楚这是否能解决您的情况;根本问题似乎是您不希望在实例繁忙时流量到达。
也就是说,您可以使用探测状态作为向负载均衡器发出信号的方式,表明您不希望接收更多流量。您可以使用 HTTP 探测配置,并让应用程序通过使用 HTTP 200 以外的其他内容进行响应来发出探测失败信号,负载均衡器将停止向其发送新流。负载平衡到该实例的现有流不会终止并将继续。您无法使用探针来发现虚拟机的负载;负载均衡器无法查看您的虚拟机的负载。
关于azure - Azure 负载平衡是否了解服务器 http 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46002339/