部署大量群集节点数量的无状态服务

时间:2017-01-27 05:53:20

标签: azure-service-fabric

我注意到,在将无状态服务部署到群集时,最大实例数不能超过物理节点数。关于这两个问题:

  1. 这是设计上的硬限制(即不仅仅是开发群集问题)?
  2. 当半个群集关闭时,该服务的处理能力会发生什么变化?

1 个答案:

答案 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/