Akka.NET: 将 akka.net 集群中的子 actor 创建限制在一台机器上

Akka.NET: Restrict child actor creation in akka.net cluster to a single machine

我们的应用程序中有一个特定场景 - 此应用程序中的所有子角色都处理大量数据(大约 50 - 200 MB)。 因此,我们决定在创建父 actor 的同一台机器(工作进程)中创建子 actor。

Currently, this is achieved by the use of Roles. We also use .NET memory cache to transfer the data (Several MBs) between child actors.

问题: 是否可以在子 actor 中关闭集群以达到我们期望的结果?

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

当我们发现跨机器分布子 actor 导致的网络开销时,我们决定将子 actor 的创建限制在接收到主要请求的相应机器上,并且只跨机器分布父 actor。

在就此问题联系 Akka.NET 专家时,我们被建议使用 "Roles" 以将子 actor 的创建限制在集群系统中的单个机器上。 (例如,Worker1Child、Worker2Child 而不是 "Child" 角色)

问题(续) : 我只是想知道,如果简单地通过禁用子 actor 中的集群选项是否会达到相同的结果;这样做是最佳做法吗?

请指教

在我看来,您一直在使用集群池路由器在集群中远程部署 worker actors——您没有在描述中明确提及这一点,但听起来确实如此。

这听起来也像是,您在这里真正想做的是利用本地亲和力:让 child 相同实体的工作参与者在同一进程中一起工作。

以下是我的推荐:

  1. 将所有 worker actor 创建为 children of parents,在本地,在同一进程内,但要么使用类似 child-per-entity pattern 的东西,要么使用 LOCAL 池路由器。
  2. 使用集群组路由器、使用角色等在工作节点之间分配工作
  3. 大容量工作负载中的任何工作都应该直接从 parent 流向 children,而不需要 round-trip 在集群的其余部分之间来回流动。

根据您在此处提供的信息,这是我所能提供的最接近 "general" 的答案 - 希望对您有所帮助!