每个节点有多个无状态服务实例

时间:2018-05-15 11:32:22

标签: azure-service-fabric service-fabric-stateless

我的无状态服务从Service Bus队列接收任务并对其进行处理。我现在正在尝试尽可能多地找到使用Service Fabric节点资源的最佳方法。所以我看到了两种方法:1)在服务中创建多个线程2)为每个节点创建几个服务实例。我认为第二种方式更安全和正确但是当我为1节点集群指定InstanceCount = 5时,我收到了警告。

的Config.xml

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/EmailSenderApp" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="MainService_InstanceCount" Value="1" />
    ...
  </Parameters>
</Application>

错误:

Unhealthy event: SourceId='System.FM', Property='State', HealthState='Warning', ConsiderWarningAsError=false.
Partition is below target replica or instance count.
fabric:/EmailSenderApp/EmailSenderMainService 5 1 09916a6b-1701-46ce-a281-0e223a68f980
Ready _Node_0 131708550454646056
(Showing 1 out of 1 instances. Total available instances: 1)

2 个答案:

答案 0 :(得分:1)

如@Diego Mendes所述,这是不可能的。

根据文档,我会说Service Fabric希望服务实例能够利用所有可用资源并报告适当的指标,以允许Cluster Manager服务平衡集群中节点之间的负载。

如果没有足够的可用资源,则按节点进行扩展,即应将其他节点添加到集群中,并且在无状态服务的情况下(如果InstanceCount = -1),它将自动创建新实例。 / p>

答案 1 :(得分:0)

当前不可能在同一节点上有多个主分区。

SF有阻止这个的放置限制,我的意见是它是一个bug,b因为没有关注无状态服务失去状态,因此我打开了一个GitHub问题Allow singleton stateless services to have multiple instances per node bypassing placement constraint < / p>

为了解决这个问题,我引导您使用解决类似问题的选项来解答这个问题:

Simulate 10,000 Azure IoT Hub Device connections from Azure Service Fabric cluster