繁体   English   中英

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

[英]Scaling of Azure service fabric Stateless services

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

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

谢谢!

通常,对于无状态SF服务,无需使用分区,因此如果可以,请避免这样做:

有关SF分区的更多信息,包括为何通常不将其用于无状态服务

如果您使用的是ServiceProxy API,它将与群集中的给定物理节点保持粘性连接。 如果(例如)公开HTTP端点,则群集中的每个物理实例都将拥有一个(这意味着您最终一次只能与一个端点进行对话,除非您手动循环通过它们)。 您可以通过以下方式避免这种情况:

  1. 为每个调用创建一个新的代理实例,如果您进行大量操作(或者手动循环遍历实例端点URL的列表,这可能会很繁琐和/或昂贵),这往往会很昂贵。

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

Azure负载平衡器

Azure交通管理器

祝好运!

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

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

如果您在繁重的工作期间可以增加服务的实例数量,然后代理将自动包括新实例。

我假设您正在从群集外部调用服务。 如果是,则您的问题并非特定于Service Fabric,而是Azure VMSS +LB。

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

LB不会舍入请求,因为它们使用的是同一连接,这是LB的限制(功能),要变通解决此问题,您应该打开多个连接或使用多个客户端(实例)。

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

来源: Azure负载平衡器分发模式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM