分布式任务调度,作业队列

3
我需要发送一封特定任务通知邮件,每6小时发送一次给期望收到该邮件的用户。因此,我使用node-cron在我的服务器上安排了一个作业,每30分钟唤醒一次以检查是否有任何用户未响应其电子邮件,使用mysql db跟踪并更新updated_at列。这样可以正常工作!
但现在我必须在分布式环境中使其工作。使用Elastic Beanstalk和1-4个微型ec2实例。我不想添加除我已有的(MySQL)之外的任何其他db/storage/queue。
以下是需要回答的问题:
1. 有人能够列出与node-cron一起执行此操作的步骤吗?(确保某个任务只执行一次,在6小时时间段内不希望发送通知) 2. 或者我们是否可以使用其他库在mysql中执行此操作,确保仅执行一次任务? 3. 是否可以在服务器或数据库负载不紧张时执行此任务,而不是每30分钟执行一次? 4. 是否有一种方法可以在不使用db(和多个实例)的情况下完成此操作,因为每30分钟调度工作已经可以正常工作!
另外,我的api服务器和worker是同一个。

你升级了你的解决方案(并开源了它)吗? 还是你找到了另一种选择? - Paulo Oliveira
使用了一个简单的Node.js计时器来完成这个任务,不太美观! - Pinser
1个回答

0

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

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

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

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


谢谢您的回复,我正在寻找一些逻辑和指导来升级我的现有解决方案。 - Pinser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接