多实例背后的任务调度



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

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

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

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

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

你们觉得怎么样?

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

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

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

  • 确保选择一个反映工作负载的可见性超时(因此消息不会在另一个worker仍在处理时重新进入队列)
  • 不要在消息中存储工作负载,引用它!消息的大小最多只能为256kb,消息的大小会影响性能和成本。
  • 确保您了解计费!由于计费是按64KB块计费的,这意味着1个220KB的消息按4个64KB块/请求计费。
  • 如果你让你的消息小,你可以节省更多的钱通过做批量请求,因为你的bang for buck将是更大的!
  • 使用长轮询来检索消息,以便从消息请求中获得最大价值。
  • 通过使用EC2 IAM Role向SQS授予应用程序权限,因为这是最佳安全实践和AWS推荐的方法。

这是一项很好的服务,应该能很好地解决你目前的需求。

谢谢!

Xavier .

相关内容

  • 没有找到相关文章

最新更新