我必须每 6 小时通过电子邮件发送一个特定的任务通知,该通知需要发送给需要它的用户。因此,我使用 node-cron 在我的服务器上安排了一项工作,该工作每 30 分钟唤醒一次,以检查是否有任何用户没有回复他们的电子邮件,使用带有 updated_at col 的 mysql 数据库进行跟踪。工作正常!
但现在我必须让它在分布式环境中工作。将 Elastic Beanstalk 与 1-4 个微型 ec2 实例结合使用。除了我拥有的 (MySQL),我不想添加任何其他数据库/存储/队列。
- 有人可以列出结合 node-cron 执行此操作的步骤吗? (确保某个任务执行一次,我不想在 6 小时之前发送通知)
- 或者我们是否有其他一些库可以在 mysql 中执行此操作以确保任务只完成一次
- 当我的服务器或数据库负载不紧张时,我可以在 30 分钟内完成任务。
- 有没有一种方法可以不使用数据库(和多个实例)来做到这一点,因为每 30 分钟安排一次工作就可以了!
补充一下,我的api server和worker是一样的。
最佳答案
我遇到过这个用 Python 开发的解决方案:Celery
"Celery is an asynchronous task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well."
可以与多个 Python 框架(Django、Pylons 等)集成: http://docs.celeryproject.org/en/latest/getting-started/introduction.html#framework-integration
但您更喜欢 Node.js,因此您也可以将它与其他语言一起使用,它可以通过 HTTP 回调(Webhooks)集成: http://docs.celeryproject.org/en/latest/userguide/remote-tasks.html
关于javascript - 分布式任务调度,作业队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26843483/