3

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

配置文件

<?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)
4

2 回答 2

3

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

SF 有放置限制来阻止这一点,我认为这是一个错误,b 因为没有担心在无状态服务上丢失状态,因此我打开了一个 GitHub 问题以允许单例无状态服务每个有多个实例节点绕过放置约束

为了对这个问题进行排序,我通过解决类似问题的选项引导您找到这个答案:

从 Azure Service Fabric 群集模拟 10,000 个 Azure IoT 中心设备连接

于 2018-05-15T12:51:27.670 回答
2

正如@Diego Mendes 所提到的,这是不可能的。

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

如果没有足够的可用资源,则根据节点进行扩展,即应该将额外的节点添加到集群中,如果是无状态服务(如果 InstanceCount=-1),它将自动创建新实例。

于 2018-06-12T06:58:09.627 回答