Akka(1节点产品/缺点):BalancingDispatcher即将被弃用。它需要什么?

时间:2013-12-07 11:23:07

标签: scala akka producer-consumer

根据"Effective Akka"平衡调度程序即将被弃用。我将开始研究一些(单机)生产者/消费者代码,该代码处理处理截然不同形状的工作量。我该怎么用?

我希望生成器阻塞(akka块或线程块,我不在乎)(similar to this question),因为它将从数据库游标中输入204,000个条目:D

为我自己的模式编写boiler plate似乎过于沉重。管道中必须有新的东西取代平衡调度员。


杂乱自我/思路的笔记。

我想解决的问题:

尽可能使用小代码编写具有2个actor类的生产者 - 消费者系统,这些类可以使单个机器的处理能力饱和。另外,不要一次性从消费者那里发送所有作品a)有很多工作(我不知道子邮箱的大小限制是多少)和b)工作有不同的形状。

方法/假设

我没有看到一个平衡调度员的例子,所以我对它的作用或如何使用它的期望很可能会被扭曲。调度程序似乎是一个与整个actor系统相关联的概念,文档表明要求基于均衡调度程序的actor系统的所有actor应该能够处理相同的消息(或者换句话说,可能是相同的actor类型) 。

<击>

如果情况确实如此,那么假设并没有真正映射到prod-cons,因为cons驱动程序必须在actor系统之外。作为另一个系统中的演员或app启动中的基于future的ask循环。平衡调度程序中的actor类型总是可以将逻辑和消息类型变成prod,但这将是一个相当讨厌的hack。或者,actor系统启动可能有一个钩子,可以用来管道消息队列满(但这似乎不是一个很好的做事方式)。我得出结论,平衡的调度员确实很讨厌。

以上假设是错误的,路由器文档的结尾有这样说:

  乍一看,似乎有重叠   BalancingDispatcher和Routers,但它们相互补充。该   平衡调度员负责管理演员   路由器负责决定哪条消息去哪里。路由器   也可以有跨越多个演员系统的孩子,甚至是远程的   但是,调度员生活在一个演员系统中。

对于我的问题,哪种情况更加坚固:D

好的,所以使用平衡调度员+循环路由器指定的子actor可能会成功。但是附加的共享邮箱的大小在哪里(从下面的一般概述,可选参数mailboxcapacitymailbox-type似乎这样做)。

链接

这里有三个概念。 The dispatcherThe routermailbox

General overview

上面链接的最新文档似乎没有提及平衡调度程序被弃用。

1 个答案:

答案 0 :(得分:6)

我是Effective Akka的作者,不幸的是,似乎我对BalancingDispatcher被弃用了我的错误 - 我接受了我认为在本书完成时会发生的事情。但是它会改变。来自Akka团队负责人Roland Kuhn:

  

...我们不会弃用BalancingDispatcher;但是,我们会   不再以其自由(错误)可配置的形式提供它,而是它   将作为池的路由器(即管理其路由)。   如果你想要最低的抖动和最低的延迟,那么从a   单队列仍然是我能想到的最好的事情。

谢谢!