gpt4 book ai didi

c# - MSR Orleans - 如何创建具有并行读取的读写器粒度

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:26 28 4
gpt4 key购买 nike

我需要一个 reader-writer grain(s?) 来保存一些值,以便系统的其他部分可以频繁地并行引用它们。

我所追求的是存储一些系统范围的配置值,这些值经常被访问,并且可能会发生变化,但很少发生(最多一个月一次左右)。系统应该可以在不停机的情况下进行重新配置。我目前正在考虑的是将数据存储在某个数据库中。然后在silo启动的时候会读取,外部变化后会有专门的回调重新读取数据。我不想每次需要时都从数据库中读取数据,因为:

  • 它会在筒仓内产生不必要的处理开销,因为必须处理和过滤掉一些数据。
  • 它会增加数据库的负载,我不能保证它在处理高负载方面与筒仓环境一样好。
  • 数据在更新之前由筒仓环境验证。直接从数据库读取意味着在运算符(operator)更新和修复新数据时没有中间层来保存最后已知的有效数据。

我可以轻松地创建读写器锁定的内存数据存储,但 Orleans 的单线程执行策略不允许并行访问保存数据的 grain。我可以想到以下方法来绕过这个:

  • 在多个 grain 中拥有多个数据副本。这显然不是最优的。
  • 使用静态字段来存储数据,让grain成为一个无状态的worker。这意味着每个筒仓都有自己的数据副本(这也有助于减少网络负载),但无法要求每个筒仓更新其数据副本(至少我知道)。

建议?

最佳答案

你看过类似 Smart cache pattern 的东西吗? ?

也许使用 Reentrant Cereal 也可以提供帮助,这将允许方法调用交错。

我找到了 this issue在github上要求相同。

关于c# - MSR Orleans - 如何创建具有并行读取的读写器粒度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48145496/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com