在当前使用无状态服务的情况下,为了防止连接断开,要求的设计是使用在每个节点上运行的主实例(当前设置为使用5个节点),希望在每个节点上运行的每个主实例可以帮助端点不会由于以下原因而出错:连接丢失。 (在这种情况下为SignalR)
因此设计应为: 每个分区中有一个主副本和4个副本,总共5个分区在5个节点上运行。
这本来应该是一个简单的配置设置,但是由于缺少带有示例代码的详尽手册,因此很难完成。
到目前为止,我发现的是:
为Service实例计数设置DefaultValue =“-1”可以使该服务在每个节点上运行,但是您仍然需要将其与以下一项结合使用:
SingletonPartition或 UniformInt64Partition或 NamedPartition
SingletonPartition是无状态服务中的默认设置,并且DefaultValue“ -1”与SingletonPartition的组合强制该服务仅在一个节点上运行,这超出了使用多个节点的目的。
所以我尝试了类似的方法: StatelessService InstanceCount =“ 5”(包括副本是否为25?) UniformInt64Partition PartitionCount =“ 5” lowKey =“ 0” highkey =“ 5”(高键应该为24才能包括所有副本吗?)
某些链接说低调和高调应该匹配分区的数量,而另一个链接似乎包括所有实例(包括副本)。
我仍然无法成功实现5个分区,5个节点以及每个分区运行主要服务。.
答案 0 :(得分:1)
因此,使用单例分区并将实例计数设置为-1。
答案 1 :(得分:0)
我相信您想要的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"
背后的原因是,如果您使用服务远程处理,则使它们易于定位。
答案 2 :(得分:0)
如果我正确理解了问题,则需要确保每个节点上都运行着一个单独的主副本。
我只能想到一种解决方案(我无法用原始分区来实现)-您可以创建服务的多个实例,并使用placement constraints将每个服务限制为一个节点使用 NodeType 约束或通过设置无效或必需的域来placement policies。
答案 3 :(得分:0)
在两种情况下都应使用副本集。就Service Fabric中的无状态服务而言,副本只是服务的副本。 另外,对无状态服务进行分区是非常罕见的情况。