【问题标题】:Azure Service Fabric : Creating a proxy with the partition key ID (Int64RangePartitionInformation)Azure Service Fabric:使用分区键 ID (Int64RangePartitionInformation) 创建代理
【发布时间】:2018-05-17 20:21:45
【问题描述】:

目前我有一个小问题要解决,我似乎在 SF 框架中找不到适合我的解决方案。问题很简单,包括:

  • 我有一个 Int64RangePartition,它允许我通过以下方式找到服务的所有分区:

    _fabricClient.QueryManager.GetPartitionListAsync(_globalStatsSvcUri)

  • 这很好用,但与 NamedPartitions 方案不同,它似乎无法在不提供 Int 密钥的情况下创建服务代理(带远程处理)来使用该服务。

    IGlobalStatsSvc globalStatsSvc = ServiceProxy.Create(_globalStatsSvcUri, partitionKey);

  • 我的具体情况是,我希望能够扩展并行统计计算服务,但希望能够与配置文件 ID 保持连接。因此我想选择 Int64RangePartition 方案。

  • 但是当我需要查询系统的全局统计信息时,我需要并行调用所有分区,然后用 Chan' 算法聚合 Avg、Variance 和 Std。

  • 为此,我需要能够在不知道哪个 Int 键映射到分区的情况下创建代理。我只需要分区键 ID。

  • 遗憾的是,SF 似乎只允许在 NamedPartition 方案中执行后者,而不是 RangedPartition。

有没有人针对这种特殊情况提供解决方案?选择 NamedPartition 方案可能有效,但在修改统计信息的情况下会更加复杂(至少需要确保随机分区名称在统计上兼容)。另一种解决方案是“手动”创建服务代理,因为我应该能够使用我解析的分区 ID 构建 URL。但它的工作量更大,并且绕过了 SF 提供的强类型客户端。

将这两种行为与 RangedPartition 方案混合起来会简单得多,因为我可以在编辑时知道要修改哪个分区,然后在需要进行聚合时在读取时查询所有分区。

【问题讨论】:

    标签: c# azure-service-fabric


    【解决方案1】:

    找到了问题的解决方案,我对 SF 框架还是很陌生,但是当查询服务的分区列表时,会给出有关 特定分区 的低键和高键的信息.

    因此,只需在通过代理调用服务之前传递这些 ID。

    足够简单:

    var partitionInformation = partition.PartitionInformation as Int64RangePartitionInformation;
    var partitionKey = new ServicePartitionKey(partitionInformation.LowKey);
    

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 2019-11-30
      • 2018-11-17
      • 2018-01-11
      • 2017-05-24
      • 2016-12-14
      • 1970-01-01
      • 2015-07-11
      • 2017-09-08
      相关资源
      最近更新 更多