我需要一个读写器粒度来保存一些值,以便系统的其他部分可以频繁地并行引用它们。
我所追求的是存储一些系统范围内的配置值,这些配置值经常被访问,并且可能会发生变化,但很少见(最多一个月一次左右)。系统应该可以重新配置而无需停机。我目前正在考虑的是将数据存储在某个数据库中。然后会在silo启动时读取,外部变化后会有专门的回调再次读取数据。我不想每次需要时都从数据库中读取数据,因为:
- 它会在筒仓内产生不必要的处理开销,因为必须处理和过滤掉一些数据。
- 它会增加数据库的负载,我不能保证它在处理高负载方面会像孤岛环境一样好。
- 数据在更新之前由 silo 环境验证。直接从数据库中读取意味着在操作员更新和修复新数据时将没有中间层来保存最后一个已知的有效数据。
我可以轻松地创建一个读写器锁定的内存数据存储,但是 Orleans 的单线程执行策略不允许并行访问保存数据的粒度。我可以想到以下方法来绕过这个:
- 在多个grain中拥有多个数据副本。这显然不是最优的。
- 使用静态字段来存储数据,让grain成为一个无状态的worker。这意味着每个筒仓都有自己的数据副本(这也有助于减少网络负载),但没有办法要求每个筒仓更新其数据副本(至少我知道)。
建议?