我的无状态服务从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)
答案 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