【发布时间】: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 方案混合起来会简单得多,因为我可以在编辑时知道要修改哪个分区,然后在需要进行聚合时在读取时查询所有分区。
【问题讨论】: