【问题标题】:How to make sure associated grains are activated in same silo?如何确保相关的谷物在同一个筒仓中被激活?
【发布时间】:2021-10-20 13:40:34
【问题描述】:

我正在使用 orleans 框架实现一个游戏应用程序。每个游戏实例都是一个单独的GameGrain,并且每个GameGrain 实例都有一些关联的颗粒,例如PlayerGrain(对于游戏中的每个玩家),WeaponsGrain(武器库存)。

这些grain的主键是:

GameGrain : <GameGuid>

PlayerGrain : <GameGuid>-<PlayerGuid>

WeaponsGrain:<GameGuid>

现在,我想实施颗粒放置策略,确保任何游戏实例的 GameGrainPlayerGrainWeaponsGrain 在与 GameGrain 相同的孤岛上激活

如果您能提供一些关于我应该如何做的意见,将不胜感激?

【问题讨论】:

    标签: orleans


    【解决方案1】:

    如果您希望将谷物放置在与创建它的谷物相同的筒仓中,您可以使用属性[PreferLocalPlacement] 标记谷物。

    还可以使用其他放置策略,您甚至可以编写自己的策略。阅读documentation on grain placement了解更多信息。

    由于与谷物通信相关的成本,并且您对此非常关注以考虑谷物放置,因此您可能需要重新考虑哪些对象应该是谷物。如果一个对象不需要被多个grain访问并且真正由一个grain拥有,那么您可能只想让它成为同一个grain的一部分。

    例如,武器可以是玩家颗粒中武器集合中的一个对象。如果需要更改所有权,可以将对象发送给另一个玩家grain。

    【讨论】:

    • 大同意。设计正确的颗粒粒度(:))对于缩放非常重要。
    • 我最终使用PreferLocalPlacement 来控制本地放置。将need 放在本地被证明是一个糟糕的解决方案。
    猜你喜欢
    • 2019-04-04
    • 2020-11-10
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多