【问题标题】:Cron job on NodeJS server runs multiple times simultaneously due to load balancers由于负载均衡器,NodeJS 服务器上的 Cron 作业同时运行多次
【发布时间】:2020-04-07 18:40:15
【问题描述】:

我的 nodeJS 服务器(React 应用程序的一部分)上有 cron 作业服务,我使用 Convox 将其部署到 AWS,它有 4 个负载均衡器服务器。这意味着我的 cron 作业在每台服务器上同时运行 4 次,而我只希望它运行一次。如何阻止这种情况发生并让我的 cron 作业只运行一次?据我所知,没有可靠的方法将我的 cron 锁定到特定实例,因为实例是易变的,可能会根据需要删除/重新创建。

cron 作业服务执行诸如查询和更新我们的数据库、向用户发送电子邮件和文本以及执行外部 API 调用等任务。这些服务在服务器启动时使用cron npm 包运行(在server.listen 之后)。

【问题讨论】:

  • 了解更多关于此作业是什么、需要同步的内容以及您如何运行它的信息?您始终可以使用原子数据库或 Zookeeper 之类的东西进行锁定,但这可能不是必需的,具体取决于您要执行的操作。
  • @Brad 我已经更新了原版,说明我们的 cron 工作是做什么的
  • 你能通过url公开这些任务吗?这样,您就可以拥有一个通过 url 请求每个作业的外部 cron 服务器。见cron-job.org/en

标签: node.js amazon-web-services cron backend convox


【解决方案1】:

你能通过 url 公开这些任务吗?这样,您就可以拥有一个外部 cron 服务,该服务通过 url 针对 ELB 请求每个作业。

https://cron-job.org/en/

这种方法的另一个优点是,如果 url 没有返回 200 状态,您会收到错误报告。这可以简化所有作业的错误跟踪。

这也提供了更好的减少和负载平衡,而不是在一个实例中运行所有作业。

【讨论】:

  • 我也有同样的问题,除此之外没有其他解决方案。
【解决方案2】:

我有同样的问题。在这里查看我的解决方案。由于 AWS 上有两个实例,因此发送了两封电子邮件。我通过唯一的随机数锁定每次发送。 我的示例基于 MongoDB。

https://forums.meteor.com/t/help-email-sends-emails-twice/50624

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2019-06-20
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多