【问题标题】:Task scheduling behind multiple instances多实例背后的任务调度
【发布时间】:2017-02-14 11:25:07
【问题描述】:

目前我正在解决一个工程问题,并希望与 SO 社区展开对话。

我想实现一个任务调度器。我有两个单独的 nodeJS 应用程序实例,位于弹性负载均衡器 (ELB) 后面。问题是当两个实例出现时,它们都尝试执行相同的任务逻辑,导致任务运行不止一次。

我当前的解决方案是使用 node-schedule 来安排任务运行,然后让它们引用数据库以检查任务是否在指定的运行时间间隔后尚未运行。

这里的逻辑有点混乱,我想知道是否有更优雅的方法可以做到这一点。

也许可以在特定实例上设置特定的环境变量 - 这样只有该实例才能运行任务。

大家觉得呢?

【问题讨论】:

    标签: node.js scheduled-tasks amazon-elb


    【解决方案1】:

    您所描述的似乎是 AWS Simple Queue Service 用例的完美示例。

    https://aws.amazon.com/sqs/details/

    解决方案中需要注意的要点:

    • 确保选择能反映工作负载的可见性超时(这样消息在其他工作人员仍在处理时不会重新进入队列)
    • 不要将您的工作量存储在消息中,引用它!一条消息的大小最多只能为 256kb,并且消息大小会影响性能和成本。
    • 确保您了解计费方式!由于计费以 64KB 块计费,这意味着 1 220KB 消息按 4x 64KB 卡盘/请求计费。
    • 如果您将消息缩小,则可以通过批量请求节省更多资金,因为您的收益会大得多!
    • 使用长轮询检索消息以从消息请求中获得最大价值。
    • 使用 EC2 IAM 角色将您的应用程序权限授予 SQS,因为这是最佳安全实践,也是 AWS 推荐的方法。

    这是一项出色的服务,应该可以很好地解决您当前的需求。

    谢谢!

    泽维尔。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 2018-11-27
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多