【问题标题】:worker queue for nodejs?nodejs的工作队列?
【发布时间】:2013-05-30 00:54:42
【问题描述】:

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

我注意到有很多库已经这样做了,但是使用了 redis 和 fork。是否有充分的理由分叉而不是使用集群 API?

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

我宁愿不添加 redis,因为我已经在使用 mongo。此外,我的要求非常宽松,我想要持久性,但对于第一个版本可以没有它。

问题的第二部分: 目前最稳定/最常用的 nodejs 工作队列库是什么?

【问题讨论】:

  • 其中许多可能是在 Cluster 不可用时启动的,或者由于它仍被标记为“实验性”而不想使用它。具有集群和域的工作队列实现完全有可能比 fork 方法更好。
  • 稳定/使用的工作队列:zeroMQ
  • zeromq 没有 nodejs 绑定——我正在寻找一个具有节点支持的库,理想情况下不需要单独的服务器。重量轻的东西。
  • 你能稍微扩展一下你的用例吗...... node-threads-a-gogo 似乎有非常具体的用例。如果您的用例适合,它似乎很适合。答案中提供的链接甚至提到了对非常具体的用例的需求。最佳答案取决于您的事件循环需要什么以及它将运行的架构类型......

标签: node.js message-queue worker


【解决方案1】:

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

我使用agenda 进行作业调度。

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

在此之前,我使用kue,但由于我的应用程序的其余部分使用 mongodb 而我不喜欢仅使用 redis 进行作业调度而放弃了它。

【讨论】:

    【解决方案2】:

    你试过https://github.com/rvagg/node-worker-farm吗? 它重量很轻,不需要单独的服务器。

    【讨论】:

    • 优秀。谢谢。
    【解决方案3】:

    我个人偏爱cluster-master。

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

    我喜欢 cluster master 的原因是因为它除了添加用于分叉你的进程的逻辑之外几乎没有做任何事情,并且让你能够管理正在运行的进程数量,以及一点点日志记录/恢复启动!我发现过于臃肿的流程管理库往往不稳定,有时甚至会减慢速度。

    如果满足以下条件,此库将对您有好处:

    • 您的模块主要是异步的
    • 您不会触发大量不同类型的事件
    • 触发的事件有少量工作要做,但您有很多类似的事件触发(例如 Web 服务器)

    上面列出的原因是threads-a-gogo可能对你有好处的原因,相反的原因。如果你的代码中有一些地方,在你的事件循环中有很多工作要做,那么像threads-a-gogo这样专门为这项工作启动一个“线程”的东西很棒,因为你没有确定提前生成多少工人,而是在需要时让他们工作。注意:如果有可能生成很多进程,这也可能很糟糕,如果你开始启动太多进程,事情实际上可能会陷入困境,但我离题了。

    总而言之,如果您的模块在很大程度上已经是异步的,那么您真正想要的是一个工作池。当您的进程未侦听事件时,最大限度地减少停机时间,并最大限度地增加您可以使用的处理器数量。除非您有一个非常繁忙的同步调用,否则单节点事件循环将难以利用处理器的单个内核。在这种情况下,最好使用 cluster-master。我建议做一些基准测试,看看你的程序在“最坏情况”下可以使用多少单核。假设这是一个核心的 33%。如果你有一台四核机器,然后你告诉集群主服务器启动 12 个工作器。

    希望这有帮助!

    【讨论】:

    • 非常基本,非常适合我目前的独特情况,但对于未来的搜索者......它已被放弃。
    猜你喜欢
    • 2018-06-20
    • 2018-09-11
    • 2012-08-22
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多