Динамическое автоматическое масштабирование AWS на основе сообщений в SQS

Вариант использования:

Каждое утро SQS будет заполняться (только один раз, и количество сообщений может сильно различаться), я хочу создавать новые экземпляры в соответствии с количеством сообщений в очереди.

например: для 200000 сообщений 4 экземпляра, 400000 8 экземпляров.

Есть ли способ, которым мы можем достичь этого?


person najeeb    schedule 04.02.2016    source источник


Ответы (1)


  1. Вы можете настроить задание cron на своем сервере или запускаемую по времени Lambda для запроса SQS, чтобы узнать количество видимых сообщений в очереди. Если вы используете интерфейс командной строки AWS, вы должны запустить aws sqs get-queue-attributes и прочитать поле ответа ApproximateNumberOfMessages, чтобы получить количество элементов в очереди. Затем вы должны использовать это число для расчета количества экземпляров и либо вызвать aws ec2 run-instances --count 4 плюс остальные параметры. Как только все будет сделано, вы завершите экземпляры.

  2. Другой способ сделать это — использовать автоматическое масштабирование и сигналы тревоги. Вы можете настроить политику ScaleOut, которая добавляет 1 сервер в вашу группу AutoScaling и запускает эту политику с помощью предупреждения CloudWatch на SQS ApproximateNumberOfMessages >= некоторого порога. Эта опция не будет ждать утра для обработки очередей, она будет работать все время. У вас также может быть политика ScaleIn для уменьшения требуемой емкости (количества серверов) в вашей группе AutoScaling, когда ApproximateNumberOfMessages ‹= некоторый порог.

person Max    schedule 04.02.2016
comment
Спасибо Макс, постараюсь вернуться к вам. Во втором подходе масштабирование будет срабатывать только за 1 раз, верно? Как он порождает столько экземпляров, сколько необходимо для количества сообщений? - person najeeb; 05.02.2016
comment
В вашей политике масштабирования установите охлаждение, например. 10 минут. Пока срабатывает ваш сигнал тревоги (›= x сообщений), он будет продолжать пытаться активировать политику увеличения масштаба, но охлаждение будет гарантировать, что он будет работать не чаще всего на сервере каждые 10 минут. Если в течение этих 10 минут очередь опустеет, сигнал тревоги перейдет в состояние ОК и перестанет вызывать политику горизонтального масштабирования. - person Max; 05.02.2016
comment
Хорошо, спасибо, пойдем с 1-м подходом, так как в нем мы получили больше контроля над системой. - person najeeb; 05.02.2016