在EC2 Auto Scaling组中安排任务

时间:2019-05-08 23:45:49

标签: spring amazon-ec2 amazon-sqs autoscaling spring-scheduled

我在一个自动伸缩组上有多个EC2。它们都运行相同的Java应用程序。在应用程序中,我想每月触发一次功能。因此,我有一个使用Spring Schedule并每月运行的函数。但是,该功能在自动缩放组中的每个单个EC2实例上运行,而只能运行一次。我应该如何处理这个问题?我正在考虑使用Amazon SQS之类的服务,但它们会有同样的问题。

要更具体地说明我所尝试的内容,在一次尝试中,该函数将具有本月唯一键的记录放入数据库中,该数据库在所有ec2实例之间共享。如果该月的记录已经存在,则放置请求将被忽略。现在问题转移到阅读部分了吗?我有一个读取数据库并完成工作的功能。但是该功能由每个ec2实例运行。

1 个答案:

答案 0 :(得分:1)

有趣!您可以在服务器的一个上进行配置以触发每月活动,但是应将Auto Scaling组中的单个实例视为相同的易碎系统,并在一个月内进行更换。因此,不能保证此特定服务器将在一个月内到来。

我建议您退后一步,将月度活动看成是在服务器外部触发的事情

我将假设服务器集群正在运行Web应用程序,并且实例前面有一个负载均衡器,用于在实例之间分配流量。如果是这样,“某物”应向负载均衡器发送一个请求,该请求将被转发到实例之一进行处理,就像任何普通请求一样。

此特定请求将针对专门用于触发每月处理的URL。

这留下了什么是发送此特定请求的“内容”的问题。为此,有很多选择。一个简单的例子是:

  • 配置 Amazon CloudWatch Events 以根据计划触发Lambda功能
  • AWS Lambda函数会将HTTP请求发送到负载均衡器