Как завершить длительную задачу на Tomcat, когда AWS AutoScaling завершает работу экземпляра EC2?

У меня есть приложение, развернутое на Tomcat 8, размещенное в среде ElasticBeanstalk с включенным автоматическим масштабированием. В приложении у меня есть длительные задания, которые необходимо завершить, а все изменения должны быть сохранены в базе данных.

Проблема в том, что AWS может убить любой экземпляр EC2 во время масштабирования, а затем некоторые задания могут быть не завершены, как ожидалось. По умолчанию AWS ждет всего 30 секунд, а затем завершает процесс Tomcat.

Я уже изменил /etc/tomcat8/tomcat8.conf файл: установите параметр SHUTDOWN_WAIT на 3600 (по умолчанию 60). Но это не устранило проблему - через 20-25 минут весь экземпляр будет убит.

Затем я попытался настроить ловушку жизненного цикла через файл .ebextensions (как объясняется в здесь). Но я не мог утверждать, что крючок жизненного цикла действительно откладывает завершение работы экземпляра (все еще ожидая ответа от службы поддержки AWS по этому поводу).

Итак, возникает вопрос: знаете ли вы какие-либо «законные» способы отложить или отменить завершение работы экземпляра при масштабировании группы автомасштабирования?

Я хочу иметь что-то подобное:

  • AWS начинает масштабироваться в группе автомасштабирования
  • группа автомасштабирования отправляет сигнал выключения экземпляру EC2
  • Экземпляр EC2 начинает останавливать все активные процессы
  • Процесс Tomcat получает сигнал о завершении работы, но ожидает завершения активного задания.
  • приложение фиксирует результат работы (это может занять до 60 минут)
  • Процесс Tomcat завершен
  • Экземпляры EC2 прекращены

person Roman Proshin    schedule 21.06.2017    source источник
comment
Это может быть наполовину: stackoverflow.com/questions/42348571/   -  person Mahdi    schedule 21.06.2017


Ответы (1)


Elastic Beanstalk состоит из двух частей - API и Worker. API масштабируется автоматически, поэтому может уменьшаться. Рабочий - это то, что работает дольше. Вы можете общаться между ними с помощью SQS. Вот как они это спроектировали.

Конечно, вы можете настроить систему. Это платформа как услуга, поэтому вы можете заставить группу автоматического масштабирования не снижаться - установив минимальное количество экземпляров на максимальное. Также вы можете отключить проверку работоспособности - это тоже может убить инстанс ... Но это взлом, последний может пинать.

person Michał Zaborowski    schedule 31.07.2017