我正在本地开发群集上运行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文档中没有提及动态分区扩展。
提前谢谢!
编辑:经过不同配置的测试后,我开始使用它。
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
答案 0 :(得分:1)
尝试了许多不同的配置后,仍然存在问题。我在检查项目的git diff后发现了它。
我的问题是服务结构应用程序文件夹中的ApplicatonParameters \ Local.5Node.xml(因为我使用5节点本地集群)文件中的ApplicationManifest参数被覆盖。
棘手的部分是,即使我删除或注释了SystemStatusConsumerActorService_PartitionCount的替代项,工作室在每次构建应用程序时也会添加一个。唯一的解决方案是更改ApplicationManifest.xml中的参数名称。
根据新的事实更改配置后,无状态服务和参与者服务分别以所需数量的实例和分区开始。
当然,五个无状态实例中有4个中断,但这完全合乎逻辑,考虑到群集在一台计算机上“运行”。