我注意到,在将无状态服务部署到群集时,最大实例数不能超过物理节点数。关于这两个问题:
答案 0 :(得分:3)
实例数不能超过群集中的节点数,不,有placement constraint可确保这一点。您可以修改群集的放置约束,但我认为您不能将其设置为完全忽略ReplicaExclusionStatic
约束。还值得注意的是,在默认设置中,它被视为警告,即如果您有node count = 7
并且您的群集有5个节点,它将警告您无法放置2个实例。
在Service Fabric中,存在实例和分区的概念,并且最常见的实例与无状态服务相关联,并且使用有状态进行分区,但这不是意味着您不能拥有无状态服务的分区(但在大多数情况下它可能没有意义)。
如果您希望运行更多实际实例服务,则可以更改分区计数,以便在每个节点上创建更多分区。无状态服务的默认值为SingletonPartition
,实例计数为-1,将一个实例放在每个可用节点上:
在ApplicationManifest.xml中:
<Service Name="MyService">
<StatelessService ServiceTypeName="MyServiceType" InstanceCount="[MyService_InstanceCount]">
<SingletonPartition />
</StatelessService>
</Service>
在PublishProfiles / Cloud.xml中:
<Parameters>
<Parameter Name="MyService_InstanceCount" Value="-1" />
</Parameters>
在5节点集群上,您将运行5个实例,没有什么奇怪的。如果您更改为实例计数= 6,那么您将获得放置警告(并且仍然不超过5个实际实例正在运行)。
现在,如果您希望在每个节点上运行更多实例(或副本),则可以修改无状态服务的分区计数:
<Service Name="MyService">
<StatelessService ServiceTypeName="MyServiceType" InstanceCount="[MyService_InstanceCount]">
<UniformInt64Partition PartitionCount="4" LowKey="0" HighKey="4" />
</StatelessService>
</Service>
在同一个群集上并使用相同的实例计数,您将获得现在运行的服务的20个(5个节点x 4个分区)副本。
现在使它变得复杂的是,当您与无状态服务交谈时,您将始终必须包含分区键。对于有状态服务,它可能没有意义,因为没有预期的状态,但是你的分区键选择应该均匀分布到负载。
然后,当您扩展群集时,每个分区将始终获得相同数量的副本,但如果将实例计数设置为特定数字而不是-1,则每个节点的分区数可能会有所不同。
本文讨论有关分区,实例和副本的更多信息。 https://blogs.msdn.microsoft.com/mvpawardprogram/2015/10/13/understanding-service-fabric-partitions/