【发布时间】:2016-03-01 14:57:31
【问题描述】:
举个简单的例子:我有一个拥有 1,000,000 个用户的服务,每个用户都有一些个人资料信息。我想使用演员管理此配置文件信息的 CRUD 操作。
在 Project Orleans 中,我的理解是每个用户有一个谷子,所以 1,000,000 个相同演员类型的虚拟谷子(只有在使用时才会创建),每个谷子都可以管理存储在其状态中的单个用户的个人资料信息。随着用户的增长,grains 的数量也在增长。
在 Service Fabric 中,如果我对文档的解释正确,它的工作方式会略有不同。我将有一个有状态的参与者类型来管理 所有 用户的 CRUD 操作,并且为了可扩展性,我将对参与者进行分区,让每个分区负责用户数据的子集。鉴于partition options,我看不到一个明显的方法来实现它与奥尔良项目相同的细粒度方式。
我真的很喜欢 Project Orleans 中的方法。演员只是为单个用户处理数据,可扩展性是显而易见的(更多的用户等于更多的颗粒)。内存模型也很简单:单个参与者通过少量状态按需获取水分。
似乎 Service Fabric 实现会稍微复杂一些。每个参与者都在与一组用户打交道,为了可扩展性,我必须提前决定我应该创建多少个分区,因为以后无法修改。至于内存模型,每个参与者管理的数据量随着用户数量的增长而增长。
所以我的问题是:我的理解是否正确,Service Fabric 中的参与者只是比 Project Orleans 更粗粒度?
更新
感谢您的回答。我的错误是认为分区包含单个参与者实例,该实例将包含和管理分区内所有参与者 ID 的状态。这是完全错误的。 Michiel 指出,一个分区包含许多参与者实例,每个参与者 ID 一个。因此,演员可以以与奥尔良项目相同的方式实施。这现在更有意义了,谢谢。
【问题讨论】:
标签: actor azure-service-fabric orleans