我有一些非常重的报道。当一个给定的实例开始处理它时,它很容易消耗我的实例拥有的两个核心中的一个的100%...如果该实例获得其中的两个,肯定会导致实例无法处理任何其他请求为aprox 1分钟...
我确实有其他实例正在运行(通常是4-6)。负载均衡器是否会选择实例A被堵塞的事实,并且在此负载下它不应该向它发送请求?或者否,负载均衡器均匀分配请求?
答案 0 :(得分:1)
您可以在负载均衡器上设置几种分发模式,请参阅Configure the distribution mode for load balancer。
从该链接可以看出系统存在一定程度的粘性,称为5元组算法,因为它使用5个属性:源IP,源端口,目标IP,目标端口,协议类型。
您可以使用PowerShell命令Set-AzureLoadBalancedEndpoint ... -LoadBalancerDistribution [opt]
在门户网站中,我认为此设置由“负载平衡规则”部分中的“会话持久性”属性控制,但选项不像PowerShell中那样精细。
正如您所见,这不是真正的循环模型。
您可以将探针设置为通过原始TCP(可连接端口)或HTTP(我可以从Web服务器获得响应)检查实时端点,因此在您的情况下,最好的选择是依赖于HTTP探测器,用于检测端点响应速度不够快,并相应地路由流量。
它绝对不会“意识到”服务器上的任何HTTP队列 - 不要忘记负载均衡器不一定是路由HTTP流量,而您可能正在使用各种各样的Web服务器。在所有可能的情况下,给NLB提供你所谈论的可见度是非常困难的。
答案 1 :(得分:1)
Azure负载均衡器是一个TCP&基于UDP流的负载均衡器,不处理应用层流量。根据新流程进行负载平衡决策。 Load Balancer使用散列函数来确定新流的分布。分配模式控制计算散列时要考虑的因素。
应用程序客户端的握手直接与VM进行。 Load Balancer无法识别您的HTTP请求,也不会对它们进行排队。您需要查看应用程序层Load Balancer以进行此类处理,例如Azure Application Gateway。这是否能解决你的情况对我来说并不清楚;基本问题似乎是你不希望在实例繁忙时流量到达。
也就是说,您可以使用探测状态作为向Load Balancer发送信号的方式,表示您不希望接收更多流量。您可以使用HTTP探针配置,并通过响应HTTP 200以外的其他内容让您的应用程序发出探测失败信号,Load Balancer将停止向其发送新流。与该实例平衡的现有流量不会终止并将继续。您无法使用探针来发现虚拟机的负载; Load Balancer无法查看VM的负载。