gpt4 book ai didi

c++ - 如何 "publish"CAF中的大量 Actor ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:40 27 4
gpt4 key购买 nike

我刚刚了解了 CAF,C++ Actor Framework .

让我感到惊讶的一件事是,通过网络使 Actor 可用的方法是"publish"。它到一个特定的 TCP 端口

这基本上意味着您可以发布的参与者数量受限于您拥有的端口数量 (64k)。由于您既需要一个端口来发布 Actor ,又需要一个端口来访问远程 Actor ,我假设两个进程每个最多能够共享大约 32k 个 Actor ,而它们可能每个都在商品服务器上拥有一百万个 Actor .如果集群有 10 个节点,情况会更糟。

为了使发布具有可扩展性,每个进程只需要为一个系统中的每个参与者打开1 端口,并打开与每个参与者系统的1 连接他们想要访问。

有没有办法将一个 Actor 发布为 Actor 系统中所有 Actor 的代理(最好没有任何显着的性能损失)?

最佳答案

让我补充一些背景。 middleman::publish/middleman::remote_actor 函数对做两件事:连接两个 CAF 实例并为您提供与远程参与者通信的句柄。您“发布”到给定端口的 actor 旨在充当入口点。这是一个方便的集合点,仅此而已。

两个 actor 之间的通信只需要一个句柄。当然,如果你想和更多的 Actor 交谈,你需要以某种方式学习新的把戏。 remote_actor 函数只是一种在两个参与者之间实现会合的便捷方式。但是,在您了解句柄后,您可以在分布式系统中自由传递它。 Actor 句柄是网络透明的。

此外,CAF 将始终在两个参与者系统之间保持单个 TCP 连接。如果您在主机 A 上发布 10 个参与者并通过 remote_actor“连接”到主机 B 的所有 10 个参与者,您将看到 CAF 最初将打开 10 个连接(因为目标节点可以运行多个参与者系统) 但除一个连接外的所有连接都将关闭。

如果您不关心 publish/remote_actor 提供的 actor 的集合点,那么您也可以使用 middleman::openmiddleman::connect 代替。这将只连接两个 CAF 实例而不交换角色句柄。相反,connect 将在成功时返回一个 node_id。这就是某些功能所需的全部。例如remote spawning of actors .

Is there a way to publish one actor as a proxy for all actors in an actor system ( preferably without any significant performance loss )?

您可以在端口发布一个 actor,其唯一目的是为会合点建模。如果该 actor 向远程 actor 发送 1000 个以上的 actor 句柄,这将不会导致任何额外的网络连接。

推荐的方法是编写一个自定义 actor,通过提供某种排序字典来显式建模多个系统之间的会合点。

只是为了完整起见:CAF 也有一个注册机制。但是,键限于 atom 值,即 10 个字符或更少。由于注册表是通用的,它也只存储 strong_actor_ptr 并将类型安全留给您。但是,如果这就是您所需要的:您将句柄放入注册表(请参阅 actor_system::registry),然后通过 middleman::remote_lookup 远程访问此注册表(您只需要node_id 来执行此操作)。

关于c++ - 如何 "publish"CAF中的大量 Actor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46329780/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com