多个实例背后的任务调度

时间:2016-10-05 21:12:23

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

目前我正在解决工程问题,并希望向SO社区开放对话。

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

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

这里的逻辑有点混乱,我想知道是否有更优雅的方式来做这件事。

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

你们都在想什么?

1 个答案:

答案 0 :(得分:0)

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

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

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

  • 确保选择反映工作负载的可见性超时(以便在其他工作人员仍在处理时,消息不会重新进入队列)
  • 不要将您的工作量存储在邮件中,请参考!消息的大小最多只能为256kb,消息大小会影响性能和成本。
  • 确保您了解结算!由于计费是以64KB块计费的,意味着1个220KB的消息被收取4x 64KB的卡盘/请求。
  • 如果你的消息很小,你可以通过批量请求节省更多的钱,因为你的收益会更大!
  • 使用longpolling检索邮件,以便从邮件请求中获得最大价值。
  • 通过使用EC2 IAM角色授予您对SQS的应用程序权限,因为这是AWS的最佳安全实践和推荐方法。

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

谢谢!

济。