akka.net - Akka.NET:将 akka.net 集群中的子 Actor 创建限制在单台机器上
问题描述
我们的应用程序中有一个特殊的场景——这个应用程序中的所有子角色都处理大量数据(大约 50 - 200 MB)。因此,我们决定在创建父actor的同一台机器(工作进程)中创建子actor。
目前,这是通过使用角色来实现的。我们还使用 .NET 内存缓存在子 Actor 之间传输数据(几 MB)。
问题:是否可以关闭子actor中的聚类以达到我们期望的结果?
编辑:更具体地说,我在下面详细解释了我们的应用程序设置。
- 整个过程发生在大约 5 台机器的 Akka.NET 集群中
- 工作进程(包含父actor和子actor)部署在每台机器中
- 在此设置中,父actor和子actor都启用了集群
当我们发现将子actor分布在机器上造成的网络开销时,我们决定将子actor的创建限制在接收到主要请求的相应机器上,并且只在机器上分布父actor。
在与解决此问题的 Akka.NET 专家联系时,我们被建议使用“角色”来将子角色的创建限制在集群系统中的单台机器上。(例如,Worker1Child、Worker2Child 而不是“Child”角色)
问题(续):我只想知道,如果简单地在子角色中禁用集群选项会达到相同的结果;这样做是最佳做法吗?
请指教。
解决方案
在我看来,您一直在使用集群池路由器在集群中远程部署工作角色 - 您在描述中没有明确提到这一点,但听起来就是这样。
这听起来也像是,您在这里真正想要做的是利用本地亲和力:让相同实体的童工演员在同一个进程中一起工作。
以下是我的建议:
- 让所有工作角色在本地创建为父级的子级,在同一进程中,但要么使用每个实体的子级模式,要么使用本地池路由器。
- 使用集群组路由器、使用角色等在工作节点之间分配工作。
- 大量工作负载中的任何工作都应该直接从父级流向子级,而无需在集群的其余部分之间来回往返。
鉴于您在此处提供的信息,这与我可以提供的“一般”答案非常接近 - 希望您觉得它有帮助!
推荐阅读
- mysql - Mariadb 服务器启动失败(code=killed)
- xcode - Xcodebuild:找不到与提供的目标说明符匹配的目标
- c++ - C++ 内核的 Jupyter 笔记本错误 [cling]
- powershell - 为什么 powershell 正则表达式不能与 \n 一起使用?
- android - 如何将类实例作为参数提供给 Kotlin 函数
- c++ - 您如何编码将不同的可执行文件合并到一个窗口框架中?像浏览器一样?
- python - 熊猫将数据框与条件合并
- html - 如何使用 react-native-render-html 从包含电话号码或电子邮件的 html 内容中单击打开电话应用程序或电子邮件?
- c# - WPF 解除绑定 OnPropertyChanged 事件
- python - PyAudio 安装在 Mac 上总是失败