Spring 在EC2自动缩放组中计划任务

Spring 在EC2自动缩放组中计划任务,spring,amazon-ec2,amazon-sqs,autoscaling,spring-scheduled,Spring,Amazon Ec2,Amazon Sqs,Autoscaling,Spring Scheduled,我在一个自动校准组上有多个EC2。它们都运行相同的java应用程序。在应用程序中,我希望每月触发一个功能。所以,我有一个函数,它使用Spring Schedule并每月运行。但是,该函数在autoscaling组中的每个EC2实例上运行,而它只能运行一次。我应该如何处理这个问题?我正在考虑使用类似AmazonSQS的服务,但它们也会有同样的问题 更具体地说,我已经尝试过了,在一次尝试中,该函数将一个带有本月唯一密钥的记录放在一个数据库中,该数据库在所有ec2实例之间共享。如果本月的记录已经存在,

我在一个自动校准组上有多个EC2。它们都运行相同的java应用程序。在应用程序中,我希望每月触发一个功能。所以,我有一个函数,它使用Spring Schedule并每月运行。但是,该函数在autoscaling组中的每个EC2实例上运行,而它只能运行一次。我应该如何处理这个问题?我正在考虑使用类似AmazonSQS的服务,但它们也会有同样的问题


更具体地说,我已经尝试过了,在一次尝试中,该函数将一个带有本月唯一密钥的记录放在一个数据库中,该数据库在所有ec2实例之间共享。如果本月的记录已经存在,则忽略put请求。现在问题转移到阅读部分?我有一个函数,可以读取数据库并完成这项工作。但该函数由每个ec2实例运行。

有趣!您可以在其中一台服务器上设置一个配置,以触发每月的活动,但自动扩展组中的单个实例应被视为相同、脆弱的系统,可以在一个月内更换。因此,无法保证这个特定的服务器在一个月内就会出现

我建议您退后一步,将每月事件视为服务器外部触发的事件

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

此特定请求将发送到专门用于触发每月处理的URL

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

  • 配置Amazon CloudWatch事件以根据计划触发Lambda函数
  • AWS Lambda函数将向负载平衡器发送HTTP请求