C# 服务结构无状态服务的多分区、多节点设置

C# 服务结构无状态服务的多分区、多节点设置,c#,azure-service-fabric,service-fabric-stateless,C#,Azure Service Fabric,Service Fabric Stateless,在当前使用无状态服务的情况下,为了防止连接丢失,所需的设计是使用每个节点中运行的主实例(当前设置为使用5个节点),希望每个节点中运行的每个主实例都能帮助端点避免因连接丢失而出错。(在这种情况下,信号员) 因此,设计将是: 每个分区中有一个主分区和4个副本,总共有5个分区在5个节点中运行 这本应该是一个简单的配置设置,但由于缺乏完整的示例代码手册,因此很难实现 到目前为止,我发现: 为服务实例计数设置DefaultValue=“-1”可实现在每个节点中运行的服务,但您仍需要将其与以下之一结合使用:

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

因此,设计将是: 每个分区中有一个主分区和4个副本,总共有5个分区在5个节点中运行

这本应该是一个简单的配置设置,但由于缺乏完整的示例代码手册,因此很难实现

到目前为止,我发现:

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

单音分区器 均一 命名分区

SingletonPartition是无状态服务中的默认值,DefaultValue“-1”与SingletonPartition的组合强制服务只在一个节点上运行,这与使用多个节点的目的不符

所以我尝试了以下方法: 无状态服务InstanceCount=“5”(是否应为25,包括副本?) Uniformin64PartitionCount=“5”lowKey=“0”highkey=“5”(highkey是否应为24以包含所有副本?)

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


我仍然无法成功实现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”
背后的原因是,如果您正在使用服务远程处理,则可以很容易地将它们作为目标。

我相信您需要的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”
背后的原因是,如果您正在使用服务远程处理,则可以很容易地将它们作为目标。

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


我能想到的解决方案只有一个(我认为这在原始分区中是不可能的)-您可以创建服务的多个实例,并使用节点类型约束或设置无效或必需的域,将每个服务限制为单个节点

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

我能想到的解决方案只有一个(我认为这在原始分区中是不可能的)-您可以创建服务的多个实例,并使用节点类型约束或设置无效或必需的域,将每个服务限制为单个节点

  • 对于无状态服务,使用singleton分区将实例计数设置为“在每个节点上运行一个”
  • 对于无状态服务,您不使用。副本用于状态的复制
因此,使用单例分区并将实例计数设置为-1。

  • 对于无状态服务,使用singleton分区将实例计数设置为“在每个节点上运行一个”
  • 对于无状态服务,您不使用。副本用于状态的复制

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

在这两种情况下都应该使用副本集。就服务结构中的无状态服务而言,副本只是服务的副本。
另外,分区无状态服务是一种非常罕见的情况。

在这两种情况下都应该使用副本集。就服务结构中的无状态服务而言,副本只是服务的副本。
另外,分区无状态服务是一种非常罕见的情况。

Hmm。。。这与@LoekD的观点完全相反。。有意思。。哪种方法更可取?有人吗?@swcraft不,不是真的,只是剪切想法。在这种情况下,InstanceCount-1看起来是无状态可用性的最佳选择。每一个例子都将得到平等对待。没有分区。嗯。。。这与@LoekD的观点完全相反。。有意思。。哪种方法更可取?有人吗?@swcraft不,不是真的,只是剪切想法。在这种情况下,InstanceCount-1看起来是无状态可用性的最佳选择。每一个例子都将得到平等对待。没有分区。