azure - 在 Azure Service Fabric 中查找有状态服务的分区键

标签 azure azure-service-fabric

我已按照此处的步骤在 Azure 中的资源组上创建反向代理。 https://learn.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy

我相信反向代理正在工作,因为我以前收到 404 错误,现在收到 400 错误请求。

错误代码为 FABRIC_E_INVALID_PARTITION_KEY

这是有道理的,因为在文档中,它说对于不使用单例分区的服务,您必须指定分区键和分区类型,如下所示:

http://mycluster.eastus.cloudapp.azure.com:19008/MyApp/MyService?PartitionKey=3&PartitionKind=Int64Range

我的问题是,如何获取该分区 key ?文档明确指出它不是在资源管理器中生成的 GUID,因此我无法使用它。我正在从结构外部的外部应用程序联系此有状态服务。

最佳答案

您在 Service Explorer 中看到的 PartitionId 是您的服务请求最终所在分区的唯一 ID。 PartitionKeyPartitionId 不同,它是进入分区哈希的键,并且基于该键的请求最终会进入分区on 计算自。

在应用程序项目的 ApplicationManifest.xml 中,新创建的服务的分区键如下所示:

<Service Name="MyService">
  <StatefulService ServiceTypeName="MyServiceType" 
                   TargetReplicaSetSize="[MyService_TargetReplicaSetSize]"
                   MinReplicaSetSize="[MyService_MinReplicaSetSize]">
    <UniformInt64Partition PartitionCount="[MyService_PartitionCount]"
                           LowKey="-9223372036854775808"
                           HighKey="9223372036854775807" />
  </StatefulService>
</Service>

这里的UniformInt64Partition表明它是一个使用的Int64RangeLowKeyHighKey 给出了可接受的 PartitionKey 的范围。 PartitionCount 给出运行此服务的分区数量。在统一范围内,分区从低键到高键统一映射。您可能应该将范围更改为对您的特定服务更有意义的值。例如:

  <Parameters>
      ...
      <Parameter Name="MyService_PartitionCount" DefaultValue="2" />
      ...
  </Parameters>
  ...
<Service Name="MyService">
  <StatefulService ServiceTypeName="MyServiceType" 
                   TargetReplicaSetSize="[MyService_TargetReplicaSetSize]"
                   MinReplicaSetSize="[MyService_MinReplicaSetSize]">
    <UniformInt64Partition PartitionCount="[MyService_PartitionCount]"
                           LowKey="0"
                           HighKey="11" />
  </StatefulService>
</Service>

这将为我们提供 2 个映射分区:

  • 0 - 5:分区 0
  • 6 - 11:分区 1

分区范围大于分区数量对于我们以后无需更改分区键进行扩展至关重要。如果我们在上面的示例中将分区数量加倍(横向扩展)到 4 个分区,那么映射将变为:

  • 0 - 2:分区 0
  • 3 - 5:分区 1
  • 6 - 8:分区 2
  • 9 - 11:分区 3

但是我们使用的分区键不会改变,这意味着服务的客户端不会受到影响。类似的推理也适用于命名方案。另一种可能的方案是 Singleton,该方案通常用于无状态服务。

可以在此处找到 Microsoft 有关服务分区的文档: https://learn.microsoft.com/en-us/azure/service-fabric/service-fabric-concepts-partitioning

回到您的问题,您的分区键可以是您在 list 中指定的 LowKey 和 HighKey 范围内的任何整数(如果您使用 UniformInt64Partition)。您收到 FABRIC_E_INVALID_PARTITION_KEY 错误表明提供的 key 不是有效的整数。如果超出可接受的范围,您可能会收到 FABRIC_E_KEY_NOT_FOUND 错误。

关于azure - 在 Azure Service Fabric 中查找有状态服务的分区键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41558308/

相关文章:

c# - 将证书添加到 Azure VM 规模集

c# - 无法访问基本的 Fabric Azure WebAPI OWIN 无状态服务

javascript - Azure Functions 和 webPubSub : get the number of clients

python - Python azure.identity 中 AADCredentials 的替代方案

azure - 如何以与Web应用程序类似的方式发布和部署.Net控制台应用程序?

azure - 将 Service Fabric 应用程序迁移到 Kubernetes

c# - 如何为远程 Service Fabric 集群创建 actor 代理

azure - 通过 VS Code 登录 Azure 失败,显示 "You appear to be offline"错误

c# - Azure 数据表 - RowKey 作为 DateTime.Ticks 的正确用法?

azure - Service Fabric Reliable Collections 中是否存在既定的分页模式