Azure Service Fabric与Project Orleans中的Actor粒度

Jam*_*ley 2 actor orleans azure-service-fabric

举个简单的例子:我有一个拥有1,000,000个用户的服务,每个用户都有一些个人资料信息.我想使用actor管理此配置文件信息的CRUD操作.

Project Orleans中,我的理解是每个用户只有一粒,所以1,000,000个虚拟粒子具有相同的actor类型(只有在使用时才会创建),每个粒子将管理存储在其中的单个用户的配置文件信息.州.随着用户的增长,谷物的数量也在增长.

Service Fabric中,如果我正确地解释文档,它的工作方式会略有不同.我会有一个有状态的actor类型来管理所有用户的CRUD操作,为了可伸缩性,我会对actor进行分区,为每个分区负责一部分用户数据.鉴于分区选项,我看不到一种明显的方法来实现它与Project Orleans相同的细粒度方式.

我非常喜欢奥尔良项目的方法.演员只是处理单个用户的数据,可扩展性是显而易见的(更多的用户等于更多的谷物).记忆模型也很简单:一个演员按需少量状态就可以得到水分.

看起来Service Fabric的实现会稍微复杂一些.每个参与者都在处理一组用户,为了可伸缩性,我必须事先决定应该制作多少分区,因为以后无法修改.对于内存模型,每个参与者管理的数据量随着用户数量的增长而增长.

所以我的问题是:我的理解是否正确,Service Fabric中的演员比Project Orleans更粗糙?

更新

谢谢你的回答.在我的错误中,我认为一个分区包含一个actor实例,它将包含并管理分区中所有actor ID的状态.这是完全错误的.Michiel指出分区包含许多actor实例,每个actor ID一个.因此,演员可以像在奥尔良项目中那样实施.现在,这更有意义了,谢谢.

Mic*_*eem 5

ActorType实际上托管在服务中.该服务已分区.每个分区将包含您的ActorType的多个实例(根据您指定的范围和分区计数).

使用API​​,您可以获得一个Actor实例(您不必显式创建一个):

var actor = ActorProxy.Create<IActorType>(new ActorId("some id"), "fabric:/application");
Run Code Online (Sandbox Code Playgroud)

在奥尔良,你的谷物分散在筒仓上,而不是将它们捆绑在分区中.因此,奥尔良可以根据需要将单个实例移动到不同的Silo.在Service Fabric中,这一切都在分区级别完成.因此,分区中的所有实例都会一起移动.