Node.js 多实例后的任务调度

Node.js 多实例后的任务调度,node.js,scheduled-tasks,amazon-elb,Node.js,Scheduled Tasks,Amazon Elb,目前我正在解决一个工程问题,希望与SO社区展开对话 我想实现一个任务调度器。我在弹性负载平衡器(ELB)后面有两个单独的nodeJS应用程序实例。问题是,当两个实例都出现时,它们会尝试执行相同的任务逻辑,导致任务多次运行 我当前的解决方案是使用节点调度来调度要运行的任务,然后让它们引用数据库,以检查任务是否在指定的运行时间间隔后尚未运行 这里的逻辑有点混乱,我想知道是否有一种更优雅的方式可以做到这一点 也许可以在特定实例上设置一个特定的env变量,这样只有该实例才能运行任务 你们都怎么想 您所描

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

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

我当前的解决方案是使用节点调度来调度要运行的任务,然后让它们引用数据库,以检查任务是否在指定的运行时间间隔后尚未运行

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

也许可以在特定实例上设置一个特定的env变量,这样只有该实例才能运行任务


你们都怎么想

您所描述的似乎是AWS简单队列服务用例的完美示例

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

  • 确保选择了反映工作负载的可见性超时(这样,当其他工作人员仍在处理消息时,消息不会重新进入队列)
  • 不要将工作负载存储在消息中,请引用它!消息大小最多只能为256kb,消息大小会影响性能和成本
  • 确保你理解账单!由于计费是按64KB的数据块计费的,这意味着220KB的消息按4x 64KB的数据块/请求计费
  • 如果你把你的信息做得很小,你可以通过批量请求节省更多的钱,因为你的回报会大得多
  • 使用longpolling检索消息,以从消息请求中获得最大的价值
  • 通过使用EC2 IAM角色向SQS授予应用程序权限,因为这是最佳安全实践,也是AWS推荐的方法
这是一项出色的服务,应该能很好地解决您当前的需求

谢谢

泽维尔