具有5个节点的Service Fabric本地开发群集运行的实例和分区少于预期的数量

时间:2018-11-26 22:55:24

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

我正在本地开发群集上运行Service Fabric应用程序,并且在我的PC上有5个“模拟”节点。

该应用程序具有实例计数设置为-1的公共API无状态服务。

我希望在Service Fabric Explorer中看到5个无状态服务实例,但我只能看到1个。

该应用程序还具有一个actor服务,其分区计数设置为10(Visual Studio自动生成的配置)。

将应用程序部署到我的PC上的开发群集时,在Service Fabric资源管理器中只能看到一个分区。在模拟“大”负载并且PC的CPU和内存使用率达到90%左右并超过90%之后,actor服务仍然只有一个分区。 我做了一个有状态服务,将分区计数设置为5,以检查我的环境是否有问题,但是它按预期运行。

对于无状态服务这是正常现象,还是我的配置有问题。此行为是特定于开发集群的,是为了避免端口冲突之类的设置。

演员服务呢?根据{{​​3}},可以进行动态分区扩展,但是actor服务的分区数量即使在高负载期间也不会增加。此外,Actor文档中没有提及动态分区扩展。

docs

提前谢谢!

编辑:经过不同配置的测试后,我开始使用它。

ApplicaitonManifest.xml中的原始配置:

<Parameters>
   ...
    <Parameter Name="HttpAPI_InstanceCount" DefaultValue="-1" />

    <Parameter Name="SystemStatusConsumerActorService_PartitionCount" 
               DefaultValue="10" />
   ...
</Parameters>

<DefaultServices>
    <Service Name="HttpAPI">
      <StatelessService ServiceTypeName="HttpAPIType" 
                        InstanceCount="[HttpAPI_InstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>

    <Service Name="SystemStatusConsumerActorService" 
             GeneratedIdRef="faad4d24-04db-4e06-8a1d-22bc6255c7fe|Persisted">

      <StatefulService ServiceTypeName="SystemStatusConsumerActorServiceType" TargetReplicaSetSize="SystemStatusConsumerActorService_TargetReplicaSetSize]" MinReplicaSetSize="[SystemStatusConsumerActorService_MinReplicaSetSize]">

        <UniformInt64Partition 
          PartitionCount="[SystemStatusConsumerActorService_PartitionCount]" 
          LowKey="-9223372036854775808" 
          HighKey="9223372036854775807" />
      </StatefulService>
    </Service>
</DefaultServices>

有效的配置:

<Parameters>
   ...
    <Parameter Name="HttpAPIInstanceCount" DefaultValue="-1" />

    <Parameter Name="SystemStatusConsumerActorServicePartitionCount" 
               DefaultValue="10" />
   ...
</Parameters>

<DefaultServices>
    <Service Name="HttpAPI">
      <StatelessService ServiceTypeName="HttpAPIType" 
                        InstanceCount="[HttpAPIInstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>

    <Service Name="SystemStatusConsumerActorService" 
             GeneratedIdRef="faad4d24-04db-4e06-8a1d-22bc6255c7fe|Persisted">

      <StatefulService ServiceTypeName="SystemStatusConsumerActorServiceType" TargetReplicaSetSize="SystemStatusConsumerActorService_TargetReplicaSetSize]" MinReplicaSetSize="[SystemStatusConsumerActorService_MinReplicaSetSize]">

        <UniformInt64Partition 
          PartitionCount="[SystemStatusConsumerActorServicePartitionCount]" 
          LowKey="-9223372036854775808" 
          HighKey="9223372036854775807" />
      </StatefulService>
    </Service>
</DefaultServices>

请注意,唯一的区别是参数名称:

HttpAPI_InstanceCount

更改为

HttpAPIInstanceCount

SystemStatusConsumerActorService_PartitionCount

更改为

SystemStatusConsumerActorServicePartitionCount

1 个答案:

答案 0 :(得分:1)

尝试了许多不同的配置后,仍然存在问题。我在检查项目的git diff后发现了它。

我的问题是服务结构应用程序文件夹中的ApplicatonParameters \ Local.5Node.xml(因为我使用5节点本地集群)文件中的ApplicationManifest参数被覆盖。

棘手的部分是,即使我删除或注释了SystemStatusConsumerActorService_PartitionCount的替代项,工作室在每次构建应用程序时也会添加一个。唯一的解决方案是更改ApplicationManifest.xml中的参数名称。

根据新的事实更改配置后,无状态服务和参与者服务分别以所需数量的实例和分区开始。

当然,五个无状态实例中有4个中断,但这完全合乎逻辑,考虑到群集在一台计算机上“运行”。