多个分区的设置,服务结构无状态服务的多个节点
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 中的无状态服务方面,副本只是服务的副本。
另外,分区无状态服务是一种非常罕见的场景。
在目前使用无状态服务的情况下,为了防止连接丢失,所需的设计是在每个节点中使用主实例 运行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 中的无状态服务方面,副本只是服务的副本。 另外,分区无状态服务是一种非常罕见的场景。