多个分区的设置,服务结构无状态服务的多个节点

Settings for multiple partitions, multiple node for service fabric stateless service

在目前使用无状态服务的情况下,为了防止连接丢失,所需的设计是在每个节点中使用主实例 运行ning(当前设置为使用 5 个节点),希望每个主实例 运行在每个节点中帮助端点不会因连接丢失而出错。 (在这种情况下,SignalR)

所以设计应该是: 每个分区中的单个主节点和 4 个副本总共 5 个分区 运行ning 在 5 个节点中。

这应该是一个简单的配置设置,但由于缺乏带有示例代码的详尽手册,因此很难完成。

到目前为止,我发现的是:

为服务实例计数设置 DefaultValue="-1" 可在每个节点中实现对 运行 的服务,但您仍然需要将其与以下之一结合使用:

单例分区或 UniformInt64Partition 或 命名分区

SingletonPartition 是无状态服务中的默认设置,DefaultValue“-1”与 SingletonPartition 的组合强制服务 运行 仅在一个节点上运行,这超出了使用多个节点的目的。

所以我尝试了类似的方法: StatelessService InstanceCount="5"(应该是 25,包括副本?) UniformInt64Partition PartitionCount="5" lowKey="0" highkey="5" (highkey 应该是 24 以包含所有副本吗?)

一些 link 说 lowkey 和 highkey 应该匹配分区的数量,另一个 link 似乎包括所有实例,包括副本。

我还是没有成功实现5个分区,5个节点,每个分区运行宁主服务..

我相信你想要的 ApplicationManifest 参数:

<Parameter Name="YourService_PartitionCount" DefaultValue="5" />
<Parameter Name="YourService_MinReplicaSetSize" DefaultValue="4" />
<Parameter Name="YourService_TargetReplicaSetSize" DefaultValue="4" />

然后在您想要的 DefaultServices 部分

<Service Name="YourService" ServicePackageActivationMode="ExclusiveProcess">
    <StatefulService ServiceTypeName="YourService" TargetReplicaSetSize="[YourService_TargetReplicaSetSize]" MinReplicaSetSize="[YourService_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[YourService_PartitionCount]" LowKey="0" HighKey="4" />
    </StatefulService>
</Service>

确保您的应用程序参数文件夹中没有可能覆盖这些值的值。

LowKey="0" HighKey="4" 背后的原因是,如果您使用服务远程处理,它们很容易成为目标。

如果我对问题的理解正确,您需要确保每个节点上都有一个单独的主副本 运行。

我能想到的只有一种解决方案(我不知道这在原始分区中是不可能的)- 您可以创建该服务的多个实例并通过设置无效或必需的域来使用 placement constraints to restrict the each service to a single node using NodeType constraint or placement policies

  • 对于无状态服务,单例分区将实例计数设置为 -1 means 'run one on every node'。
  • 对于无状态服务,您不使用 Replicas but Instances。副本用于复制状态。

因此,使用单例分区并将实例计数设置为-1。

你应该在这两种情况下使用副本集。在 Service Fabric 中的无状态服务方面,副本只是服务的副本。 另外,分区无状态服务是一种非常罕见的场景。