我正在研究一个经常查询大量演员的应用程序,因此会发送/接收大量的消息。当应用程序在单个机器上运行时,这不是问题,因为消息是在单个JVM的边界内发送的,这是非常快的。但是,当我在多个节点上运行应用程序时(使用akka-cluster),每个节点都承载这些actor的一部分,并且消息通过网络传播,这变得非常慢。
我提出的一个解决方案是在运行应用程序的每个节点上都有一个ManagerActor。这将极大地减少交换的消息数量(即,不是向每个参与者发送数千条消息,如果我们在3个节点上运行应用程序,我们发送3条消息 - 每个ManagerActor一个,然后在当前JVM中将消息发送到其他(成千上万)演员非常快。但是,我对Akka很新,我不太确定这样的解决方案是否合理。你觉得它有什么缺点吗?对Akka更好/更原生的任何其他选择?
答案 0 :(得分:2)
您可以使用Akka的Distributed Publish-Subscribe来实现这一目标。这样,您只需按常规方式在每个节点上启动一个管理员actor,让他们订阅一个主题,然后使用该主题主题向他们发布消息。在上面链接的文档中有一个简单的例子。