0

我的情况:

  • 包含我可靠字典的有状态服务。
  • 无状态 WebAPI 充当端点,因此我的其他 Web 应用程序可以与我的有状态服务进行通信。
  • 我的其他 Web 应用程序每次页面加载都会访问我的无状态 WebAPI 超过 5000 次,以从我的可靠字典中获取数据。我知道我知道......我是继承这个遗留代码的幸运儿。

问题:

每次调用的延迟大约为 100 毫秒(如果这有什么不同,我会在本地调试),但乘以 5000,我们现在谈论的是分钟。

而不是传递密钥来调用我的可靠字典超过 5000 次......我可以使用多个密钥对 Service Fabric 进行一次调用吗?

4

2 回答 2

0

您可以在 IReliableDictionary https://gist.github.com/aelij/987d974c811865029564f1bbeffb6b47上使用 Eli Arbel 的扩展。就像是

      ` var data= await YouReliableDictionary;
        var values= (await data.CreateLinqAsyncEnumerable(txn))
            .Where(x => youMultipleKeys.Contains(x.Key))
            .Select(x=>x.Value)
于 2016-12-22T21:13:55.780 回答
0

值得分析延迟以查看时间花费在哪里。想到的两个可能的罪魁祸首是

  1. 无状态前端与有状态后端之间的通信
  2. Reliable Dictionary 执行磁盘 IO 以分页调出用于读取的值。

由于您在本地运行,我认为首先还不是问题。但是,批处理对后端服务的读取调用将是减少服务之间往返次数的好主意。您还可以考虑为不需要来自权威存储的读取设置缓存。既然你控制着通讯,这一切都在你的掌控之中。

如果第二个是当前的瓶颈,Reliable Dictionary 并没有公开批处理多次读取的机制来减少今天的磁盘 IO 数量。如果您愿意为较低延迟的读取增加内存使用量,那么您可以使用Reliable Dictionary Notifications来构建您希望从中进行低延迟读取的 Reliable Dictionary 的内存缓存。

于 2016-12-25T22:56:08.983 回答