【问题标题】:Distributed Task Scheduling, Job Queue分布式任务调度、作业队列
【发布时间】:2015-01-06 17:42:51
【问题描述】:

我必须通过电子邮件发送某个任务通知,该通知需要每 6 小时发送给期望它的用户。因此,我使用 node-cron 在我的服务器上安排了一个作业,该作业每 30 分钟唤醒一次,以检查是否有任何用户没有回复他们的电子邮件,使用带有 updated_at col 的 mysql db 进行跟踪。工作正常!

但现在我必须让它在分布式环境中工作。将 Elastic Beanstalk 与 1-4 个微型 ec2 实例一起使用。除了我拥有的(MySQL)之外,我不想添加任何其他数据库/存储/队列。

  • 有人可以列出与 node-cron 结合使用的步骤吗? (确保某项任务执行一次,我不想在我的 6 小时期限之前发送通知)
  • 或者我们是否有其他库可以在 mysql 中执行此操作,以确保任务只执行一次
  • 当我的服务器或数据库上的负载不紧张时,我可以在 30 分钟内完成任务。
  • 有没有办法在不使用 db(和多个实例)的情况下做到这一点,因为每 30 分钟安排一次工作可以正常工作!

补充一下,我的api server和worker是一样的。

【问题讨论】:

  • 您是否升级了您的解决方案(并将其开源)?还是您找到了替代方案?
  • 在 nodejs 中使用了一个简单的 Timer 来做到这一点,不漂亮!

标签: javascript mysql node.js amazon-ec2 cron


【解决方案1】:

我遇到过这个用 Python 开发的解决方案:Celery

"Celery 是一个基于分布式的异步任务队列/作业队列 消息传递。它专注于实时操作,但支持 调度也是如此。”

  1. 可以与多个 Python 框架(Django、Pylons、...)集成: http://docs.celeryproject.org/en/latest/getting-started/introduction.html#framework-integration

  2. 但你更喜欢 Node.js,所以你也可以将它与其他语言一起使用,它可以通过 HTTP Callback (Webhooks) 集成: http://docs.celeryproject.org/en/latest/userguide/remote-tasks.html

【讨论】:

  • 感谢您的回复,我正在寻找一些逻辑和指导来升级我现有的解决方案。
猜你喜欢
  • 2012-07-07
  • 2011-05-19
  • 2018-09-03
  • 2021-10-09
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 2010-11-04
  • 2021-09-16
相关资源
最近更新 更多