0

我有一个在 Azure Service Fabric 中运行的服务,它使用 Azure 负载均衡器(具有公共 IP)向世界公开。

当我在 3 分钟内从一台机器发送 1000 个请求时,所有请求都被路由到同一个节点。我希望它们分布在我的 VM 规模集的所有 5 个节点上。

我没有在负载均衡器中放置任何会话持久性设置。在下面的链接中,负载均衡器默认有 4 分钟的空闲超时。这是否导致我所有的请求都转到同一个节点?

https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/

4

1 回答 1

4

在 Azure LB 上,每当您在客户端和服务之间建立连接时,负载均衡器都会将该连接路由到同一服务器\服务。空闲超时将告诉连接在考虑打开新连接之前必须保持空闲多长时间。一个新的连接可能会将您重定向到另一个服务器\服务,如果有其他可用的,它也可能会连接到相同的。

因为您可能使用相同的连接来发送所有这些请求,所以负载均衡器知道它来自同一个客户端并针对它所连接的同一个服务。它使现有连接保持活动状态。

仅在有充分理由的情况下才建议减少此时间,因为创建新连接会增加通信延迟并可能影响网络性能。这可能是他们将最短时间限制为 4 分钟的原因。

负载均衡器分布模式使用2 或 5 个元组来保持这些“粘性”连接。您可以检查您的是否使用 5 元组(默认值)。在 5 元组配置中,当连接打开时,LB 也会考虑客户端端口。

如果只有一个客户端发出这些请求,您必须管理来自单个进程的多个连接,并且每个连接将使用不同的端口。

如果您使用多个客户端,这应该不是问题,但如果这些测试来自多个客户端,您必须确认它们是否没有重用相同的连接。

在 dot net 上,您可能需要调整ServicePointServicePointManager类的配置。

您可能还想看看这篇博文:how-to-fix-load-balancer-not-working-in-round-robin-fashion-for-your-cloud-service。它适用于云服务,但使用类似的方法。

于 2018-07-21T09:41:13.390 回答