Масштабирование AWS ASG с рабочей нагрузкой, управляемой SQS

#amazon-web-services #amazon-sqs #aws-auto-scaling

#amazon-веб-сервисы #amazon-sqs #aws -автоматическое масштабирование

Вопрос:

У меня есть система, в которой я извлекаю работу из SQS и обычно трачу пару минут на каждое сообщение. Я использую серверы c5.xlarge (4 CPU), поэтому я обрабатываю до 4 сообщений одновременно; как только у меня выполняются четыре задачи, я прекращаю опрос сообщений до завершения задачи, затем опрашиваю еще несколько. Я бы хотел, чтобы мой кластер был загружен примерно на 75%, поэтому мне довольно легко регулярно сообщать показатель о том, сколько сообщений обрабатывает каждый сервер, а затем использовать его для управления масштабированием / масштабированием.

Проблема возникает, когда происходит масштабирование. Я хотел бы установить защиту scalein на серверах, обрабатывающих сообщения, но возможно, что все мои серверы будут обрабатывать одно или два сообщения, поэтому в этом случае все они будут защищены, и ни один из них не может быть отключен ASG, даже если загрузка кластера ниже 75%.

Документация AWS на https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-using-sqs-queue.html замечания «Сообщения, которые не были обработаны во время завершения экземпляра, возвращаются в очередь SQS, где они могут быть обработаны другим экземпляром, который все еще запущен», подразумевая, что проблема каким-то образом решена для меня, но я не понимаю, как этовозможно. Мое приложение использует сообщения, поэтому ASG понятия не имеет, какие сообщения возвращать. Да, время ожидания сообщений в конечном итоге истекает и они возвращаются в очередь, но это приводит к большой задержке, и если ASG выполняет повторное масштабирование, это может привести к тому, что время ожидания сообщений несколько раз и они попадают в DLQ.

Есть ли какой-нибудь способ сделать то, что указано в документах AWS, и при масштабировании возвращать любые незавершенные сообщения в очередь? Есть ли какой-либо способ уведомить сервер о прибытии scalein, чтобы у него было время их вернуть?