扩展Azure服务结构无状态服务

时间:2016-04-13 16:44:10

标签: azure azure-service-fabric

您能否让我更好地了解如何在不进行分区的情况下扩展无状态服务?

假设我们在一个集群中有5个节点,我们有5个服务实例。在简单测试中,节点表现为粘性,其中我发送的所有请求仅由一个节点提供服务。在我们有大量请求进入的情况下,可以自动使用其他实例来为流量提供服务。我们如何在服务结构中处理这种扩展情况?

谢谢!

3 个答案:

答案 0 :(得分:1)

通常不需要为无状态SF服务使用分区,所以如果可以的话,请避免使用:

more on SF partitioning, including why its not normally used for stateless services

如果您正在使用ServiceProxy API,它将保持与群集中给定物理节点的粘性连接。如果你(比如说)暴露HTTP端点,你就会为集群中的每个物理实例提供一个(这意味着你最终会一次与一个物理实例通话,除非你手动循环它们) 。你可以通过以下方式避免这种情况:

  1. 为每个调用创建一个新的代理实例,如果你这么做的话往往会很昂贵(或者通过实例端点URL列表手动循环,这可能很乏味和/或很昂贵)

  2. 将负载均衡器放在群集前面,并将从客户端到SF节点的所有流量配置为通过它转发。负载均衡器可以配置为Round-Robin等样式语义:

  3. Azure Load Balancer

    Azure Traffic Manager

    祝你好运!

答案 1 :(得分:1)

您可以使用每个节点上安装的反向代理查询请求。使用https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy

反向代理然后为您解析端点。如果您有无状态服务的多个实例,那么它会将您的请求转发给随机服务。

如果在高负载期间,您可以增加服务的实例数,然后代理会自动包含新实例。

答案 2 :(得分:1)

我将假设您从群集外部呼叫您的服务。如果是,您的问题不是特定于Service Fabric,而是Azure VMSS + LB。

Service Fabric在虚拟机规模集之上运行,这些VM在负载均衡器后面创建,当客户端连接到您的服务时,无论何时打开连接,它们都会通过负载均衡器为您的服务创建连接,负载均衡器分配一个目标VM来处理您的请求,并且使用相同的连接(保持活动状态)从客户端发出的任何请求将由同一节点处理,这就是您的负载转到单个节点的原因。

LB不会循环请求,因为他们使用相同的连接,这是LB的限制(功能),要解决此问题,您应该打开多个连接或使用多个客户端(实例)。 / p>

这是默认分发模式(基于哈希)。您还必须检查LB中的路由规则,以检查分发模式是基于哈希(5元组= ip +端口)还是 IP关联模式 (仅限ip),否则来自同一IP的多个连接仍将链接到同一节点。

来源:Azure Load Balaner Distribution Mode