![](/img/trans.png)
[英]Configuration and resource governance options for Azure Service Fabric stateless services?
[英]Scaling of Azure service fabric Stateless services
您能否让我更好地了解我们如何在不分区的情况下扩展无状态服务?
假设我们在集群中有5个节点,并且有5个服务实例。 在简单测试中,一个节点表现为粘性,其中我发送的所有请求仅由一个节点提供服务。 在出现大量请求的情况下,可以自动使用其他实例来提供流量。 我们如何处理服务架构中的此类横向扩展情况?
谢谢!
通常,对于无状态SF服务,无需使用分区,因此如果可以,请避免这样做:
如果您使用的是ServiceProxy API,它将与群集中的给定物理节点保持粘性连接。 如果(例如)公开HTTP端点,则群集中的每个物理实例都将拥有一个(这意味着您最终一次只能与一个端点进行对话,除非您手动循环通过它们)。 您可以通过以下方式避免这种情况:
为每个调用创建一个新的代理实例,如果您进行大量操作(或者手动循环遍历实例端点URL的列表,这可能会很繁琐和/或昂贵),这往往会很昂贵。
将负载平衡器放在群集的前面,并配置从客户端到SF节点的所有流量都将通过该流量转发。 可以为Round-Robin等样式语义配置负载均衡器:
祝好运!
您可以使用每个节点上安装的反向代理查询请求。 使用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.