Akka.NET:将akka.net群集中子角色的创建限制为一台机器

时间:2019-02-26 12:47:37

标签: akka.net akka.net-cluster akka.net-networking

我们的应用程序中有一个特殊的场景-该应用程序中的所有子参与者都处理大量数据(大约50-200 MB)。 因此,我们决定在创建父actor的同一台计算机(工人流程)中创建子actor。

  

当前,这是通过使用角色来实现的。我们还使用.NET内存缓存在子参与者之间传输数据(几个MB)。

问题:可以关闭子角色中的集群以达到我们期望的结果吗?

编辑:更具体地说,我在下面详细说明了我们的应用程序设置。

  • 整个过程发生在由约5台计算机组成的Akka.NET集群内部
  • 工作进程(包含父和子actor)部署在每台机器中
  • 在此设置中,父级和子级actor均已启用集群

当我们发现由于在各个计算机之间分配子actor导致的网络开销时,我们决定将子actor的创建限制为接收到主请求的相应计算机,而仅在各个计算机之间分配父actor。

在与Akka.NET专家联系时,建议我们使用“角色”,以便将子角色的创建限制在集群系统中的单个计算机上。 (例如,Worker1Child,Worker2Child而不是“ Child”角色)

问题(续):我只想知道,是否仅通过在子参与者中禁用集群选项就能达到相同的结果;这样做是最佳做法吗?

请告知。

1 个答案:

答案 0 :(得分:0)

听起来像是您一直在使用群集池路由器在群集中远程部署工作人员-您在描述中没有明确提及,但这听起来很像。

听起来,您在这里真正想做的就是利用本地亲缘关系:让同一实体的童工演员在同一流程中一起工作。

这是我推荐的:

  1. 已在同一过程中在本地创建了所有作为父母的孩子的工人演员,但使用的是child-per-entity pattern或本地池路由器。
  2. 使用群集组路由器,使用角色等在工作节点之间分配工作。
  3. 大量工作量中的任何工作都应直接从父母流向孩子,而无需在集群的其余部分之间来回往返。

鉴于您在此处提供的信息,这与我所能提供的“一般”答案非常接近-希望对您有所帮助!