2013-06-03 51 views
6

我正在开始使用节点的集群API和猫鼬为节点编写一个工作队列。nodejs的工作队列?

我注意到有很多库已经做到了,但是使用了redis和fork。分叉与使用集群API有没有很好的理由?

编辑现在我也发现这个:https://github.com/xk/node-threads-a-gogo - 太多的选择!

由于我已经使用了mongo,我宁愿不添加redis。另外,我的要求非常宽松,我想要持久性,但在第一个版本中可能没有它。

问题的第二部分: 什么是最稳定/使用nodejs工作队列库今天有吗?

+1

其中很多可能是在Cluster不可用时启动的,或者由于它仍标记为“实验性”,因此不希望使用它们。使用集群和域的工作队列实现完全可能比fork方法更好。 –

+0

稳定/使用的工作队列:zeroMQ –

+0

没有nodejs绑定zeromq - 即时寻找一个lib节点的支持,理想情况下不需要单独的服务器。重量轻。 – mkoryak

回答

5

想跟进此事。我的解决方案最终成为了自己的集群impl,其中一些集群员工是专职的工作人员(即他们只有代码才能工作)。

我使用agenda进行作业调度。

Cron类型作业由集群主机调度。其余作业在非工作人员集群中根据需要创建。 (验证电子邮件等)

在此之前,我使用kue,但因为我的应用程序的其余部分使用mongodb而放弃它,我不想仅使用redis来进行作业调度。

4

我个人很偏向集群主控。

https://github.com/isaacs/cluster-master

我喜欢集群主设备的原因是因为它确实非常少,除了在逻辑上添加对分叉的过程,并给您管理您正在运行的进程的数量的能力,一点点记录/恢复启动!我发现过于臃肿的流程管理库往往不稳定,有时甚至会导致速度缓慢。

该库将是对你有好处,如果满足下列条件:

  • 你的模块主要是异步
  • 您不必不同类型的事件触发
  • 事件数额巨大该火有少量的工作要做,但你有很多类似的事件发射(如网络服务器的东西)

上述列表的原因是为什么threads-ag ogo可能对你有好处,原因相反。如果你的代码中有几个位置,你的事件循环中有很多工作要做,像thread-a-gogo这样专门为这项工作启动一个“线程”是非常棒的,因为你没有确定提前产生多少工人,而是在需要时催生他们去做工作。注意:如果可能产生大量潜在的产卵,如果你开始启动过多的过程,事实上可能会停滞,但这也可能是不好的,但我会离题。总之,如果你的模块已经基本上是异步的,你真正想要的是一个工作池。最大限度地减少进程没有监听事件时的停机时间,并最大限度地提高可用的处理器数量。除非你有一个非常繁忙的同步调用,否则单个节点事件循环将会利用甚至是单个处理器核心的麻烦。在这种情况下,您最好使用集群主控。我推荐的是做一个基准测试,看看你的程序在“最坏的情况下”可以使用多少核心。假设这是一个核心的33%。如果你有一台四核心机器,那么你告诉集群主机启动12名工人。

希望这有助于!

+1

非常基本,完美适合我目前的独特情况,但对于未来的搜索者......它已被放弃。 –