Запланируйте задачу в EC2 Auto Scaling Group - PullRequest
0 голосов
/ 09 мая 2019

У меня есть несколько EC2 в группе автоматического масштабирования. Все они запускают одно и то же Java-приложение. В приложении я хочу запускать функциональность каждый месяц. Итак, у меня есть функция, которая использует Spring Schedule и запускается каждый месяц. Но эта функция запускается на каждом экземпляре EC2 в группе автоматического масштабирования, в то время как она должна запускаться только один раз. Как мне подойти к этому вопросу? Я думаю об использовании таких сервисов, как Amazon SQS, но у них будет та же проблема.

Чтобы быть более точным в том, что я пробовал, в одной попытке функция помещает запись с ключом, уникальным для этого месяца, в базу данных, которая используется всеми экземплярами ec2. Если запись за этот месяц уже существует, запрос на поставку игнорируется. Теперь проблемы переносятся на чтение? У меня есть функция, которая читает базу данных и выполняет свою работу. Но эта функция запускается каждым экземпляром ec2.

1 Ответ

1 голос
/ 09 мая 2019

Интересно! Вы можете поместить конфигурацию на один серверов, чтобы запустить ежемесячную активность, но отдельные экземпляры в группе автоматического масштабирования должны рассматриваться как идентичные, хрупкие системы, которые можно заменить в течение месяца. Таким образом, не было бы никакой гарантии, что этот конкретный сервер будет примерно через месяц.

Я бы посоветовал вам сделать шаг назад и посмотреть на ежемесячное событие как на то, что вызвано внешним по отношению к серверам .

Я собираюсь предположить, что на кластере серверов запущено веб-приложение, а перед экземплярами есть балансировщик нагрузки, который распределяет трафик между экземплярами. Если это так, «что-то» должно отправить запрос в балансировщик нагрузки, и он будет перенаправлен в один из экземпляров для обработки, как и любой обычный запрос.

Этот конкретный запрос относится к URL-адресу, который используется специально для запуска ежемесячной обработки.

Это оставляет вопрос о том, что является «чем-то», которое посылает этот конкретный запрос. Для этого есть много вариантов. Простым будет:

  • Настройка События Amazon CloudWatch для запуска лямбда-функции на основе расписания
  • Функция AWS Lambda отправляет HTTP-запрос на балансировщик нагрузки
...