azure-service-fabric - 使用 ServicePartitionClient 对服务结构 StatelessService 进行负载平衡

标签 azure-service-fabric

我在 Service Fabric 集群上实现 API 网关,其中 API 网关服务是将外部 HTTP 请求路由到集群中运行的一组工作程序服务的公共(public)端点。对于网关和内部服务之间的服务间通信,我们使用 ServicePartitionClient。

我发现,当使用 ServicePartitionClient 解析服务地址并与无状态服务通信时,它会选择无状态服务的单个实例,并且在每次通信尝试时仅与该实例通信。就我而言,我有多个无状态服务实例在运行,并希望在它们之间分配负载(例如循环法)。有没有一种方法可以使用 ServicePartitionClient 来做到这一点,而不需要每次都点击 NamingService 服务(这对于我们的用例来说太昂贵了)?

最佳答案

为每个请求创建一个新的 ServicePartitionClient 实例。

ServicePartitionClient 是一个相对轻量级的数据结构,它只包含一些关于通信 channel 的元数据。实际的连接管理、池和解析名称缓存发生在下面的层中:

  • FabricClient 缓存已解析的端点,这样您就不会在每次请求端点时都访问命名服务。
  • ServicePartitionResolver 使用基于我们已知的常见连接异常的基本重试循环包装 FabricClient。
  • CommunicationClientFactoryBase(如果您正在使用它)会为您保留一个 ServicePartitionResolver 实例并缓存连接。

因此,只需确保您正在重用您的 CommunicationClientFactory。如果您使用的是 CommunicationClientFactoryBase 并且没有传入自己的 ServicePartitionResolver,则它默认使用单例。

关于azure-service-fabric - 使用 ServicePartitionClient 对服务结构 StatelessService 进行负载平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40539202/

相关文章:

azure-service-fabric - Azure Service Fabric 成本计算,节点与实例

azure-service-fabric - Add-AzureRmServiceFabricNodeType -> 'accountName' 不能为空

azure - 无法再使用Remove-ServiceFabricNodeState删除故障节点

web-services - 如何合理地将需要长时间初始化的 Azure 云服务转换为 Azure Service Fabric 服务?

azure - CPU 上的服务结构自动平衡

c# - Azure Service Fabric 参与者微服务

c# - IReliableDictionary 上的 Linq 查询

azure-service-fabric - 如何启用从 StatefulService 辅助副本读取?

azure-service-fabric - 差异化包装

azure - azure 中是否有断路器模式的 native 实现?