Akka路由器的重要性

时间:2015-05-05 04:17:51

标签: scala akka actor

我对Akka路由器的重要性持怀疑态度。我在我正在进行的当前项目中使用了Akka Routers。但是,我对它的重要性感到有些困惑。在以下两种方法中,哪种更有益。

  1. 有路由器和路由器。
  2. 根据需要创建尽可能多的演员。
  3. 我知道路由器会根据策略在其路由中分配传入消息。此外,我们可以有基于路由器的管理员策略。 我也明白演员也是轻量级的,并不是创造尽可能多的演员的开销。因此,我们可以为每个传入消息创建actor,并在处理完成后根据需要将其终止。

    所以我想了解上面哪一项设计更好?或换句话说,在这种情况下,(1)优于(2)或反之亦然。

1 个答案:

答案 0 :(得分:12)

好问题。在阅读Akka文档之前,我有类似的疑虑。原因如下:

  1. <强>效率即可。来自docs

      

    表面上路由器看起来像普通演员,但实际上它们   实施方式不同路由器设计非常好   有效地接收消息并快速传递给它们   routees。

         

    普通演员可用于路由消息,但可以用作演员   单线程处理可能成为瓶颈。路由器可以   通过优化来实现更高的吞吐量   消息处理管道,允许并发路由。这是   通过嵌入路由器来实现路由逻辑直接在他们的   ActorRef而不是路由器中的演员。发送到路由器的消息   ActorRef可以立即路由到routee,绕过   单线程路由器演员完全。

         

    当然,成本是路由代码的内部结构   比使用普通演员实现路由器更复杂。   幸运的是,所有这些复杂性对于消费者来说都是不可见的   路由API。但是,在实施时需要注意一些事项   你自己的路由器。

  2. 多个路由策略的
  3. 默认实施。你总是可以写自己的,但它可能会变得棘手。您必须考虑监督,恢复,负载平衡,远程部署等。

  4. Akka路由器模式对Akka用户熟悉。如果您推出自定义路由,那么每个人都必须花时间了解所有极端情况和影响(+测试?:)。)

  5. TL; DR如果你不太关心效率,如果你更容易产生新的演员,那就去吧。否则使用路由器。