0

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

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

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

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

  • 整个过程发生在大约 5 台机器的 Akka.NET 集群中
  • 工作进程(包含父actor和子actor)部署在每台机器中
  • 在此设置中,父actor和子actor都启用了集群

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

在与解决此问题的 Akka.NET 专家联系时,我们被建议使用“角色”来将子角色的创建限制在集群系统中的单台机器上。(例如,Worker1Child、Worker2Child 而不是“Child”角色)

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

请指教。

4

1 回答 1

0

在我看来,您一直在使用集群池路由器在集群中远程部署工作角色 - 您在描述中没有明确提到这一点,但听起来就是这样。

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

以下是我的建议:

  1. 让所有工作角色在本地创建为父级的子级,在同一进程中,但要么使用每个实体的子级模式,要么使用本地池路由器。
  2. 使用集群组路由器、使用角色等在工作节点之间分配工作。
  3. 大量工作负载中的任何工作都应该直接从父级流向子级,而无需在集群的其余部分之间来回往返。

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

于 2019-06-19T08:42:41.910 回答