【问题标题】:Node worker process / cron job advice节点工作进程 / cron 工作建议
【发布时间】:2013-04-21 21:48:27
【问题描述】:

我有一个项目数据库,我需要经常更新——或者更确切地说只是执行——。我正在使用消息队列 (Kue) 来处理这些作业的并发性,但我将作业添加到队列的过程如下所示:

setInterval(function () {
  feed.find({}, function (error, foundModels) {
    jobs.create('update feeds', {
      feeds: foundModels
    }).save()
  })
}, 6000)

您认为这样的轮询是将作业添加到队列中的最佳方式吗?还是每个 feed 都应该有自己的计时器(例如,每个作业都会在完成后 6 后产生另一个作业)?

【问题讨论】:

    标签: node.js cron backgroundworker message-queue


    【解决方案1】:

    我通常按照您的方式进行操作。在您的情况下,它总是以 6 秒的间隔推送作业。这很好,只要您的工作不超过 6 秒。如果您的工作耗时超过 6 秒,那么您将开始积压,您需要增加资源来处理更大的负载。如果资源使用量达到峰值,而您又不能针对峰值进行调整,并且您没有适当的自动化流程(您应该),这可能是一个问题。

    另一种方法是仅在最后一次调用返回后 6 秒调用您的函数。你会这样做:

    function update() {
      feed.find({}, function (error, foundModels) {
        jobs.create('update feeds', {
          feeds: foundModels
        }).save(function() {
          setTimeout(update,6000);
        });
      });
    }
    setTimeout(update, 6000);
    

    我假设您的 .save 方法像所有优秀的异步库一样接受回调。 :-)

    【讨论】:

    • 这就是我的想法。我是负载平衡领域的新手,所以感谢您的澄清。不胜感激!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多