Почему все запросы к контейнеру ECS отправляются только в 1 (из 2) экземпляров EC2 в AWS?

#amazon-web-services #amazon-ec2 #cloud #amazon-ecs

#amazon-веб-сервисы #amazon-ec2 #облако #amazon-ecs

Вопрос:

В AWS у меня есть кластер ECS, который содержит службу, имеющую 2 экземпляра EC2. Я отправил 3 отдельных запроса API в эту службу, каждый из которых должен занять около часа, чтобы работать на 100% мощности. Я отправлял запросы с интервалом в пару минут. Все они обратились к одному и тому же экземпляру и оставили другой открытым. Вот график загрузки процессораЗагрузка процессора для экземпляров EC2 Вот изображение загрузки процессора моей службы. Он не использует всю свою пропускную способность: Использование служебного процессорачего мне не хватает? Почему запросы не отправляются во второй экземпляр EC2

Комментарии:

1. Вам необходимо предоставить дополнительную информацию. Находятся ли они за балансировщиком нагрузки?

2. @MarkB я не думаю, что у меня есть балансировщик нагрузки, я просто подумал, что он будет балансировать сам, если один из них будет CPU 100%? Я также только что понял, что API немедленно возвращает 200, а затем продолжает работать асинхронно, так что, возможно, в этом проблема?

3. В этом нет ничего такого, что могло бы «уравновесить само себя». У вас просто запущено 2 контейнера Docker, и похоже, что вы отправляете все запросы непосредственно в один, даже не используя другой каким-либо образом. Балансировщик нагрузки, возможно, и помог некоторым, но он не сохранил бы баланс на 100%. Я бы посоветовал вам рассмотреть возможность постановки запросов в очередь в SQS вместо того, чтобы отправлять их непосредственно в ваши экземпляры.

Ответ №1:

An ALB не будет идеально циклически перебираться между двумя экземплярами. Если вы отправляли 100 запросы 100 несколько раз, то в среднем каждый экземпляр будет получать 50 запросы каждый, но в большинстве случаев это будет не 50 точно для каждого бэкэнда.

Для длительно выполняющейся задачи, подобной этой, предпочтительнее использовать что-то другое, например SQS , при котором каждый контейнер будет обрабатывать только x сообщения одновременно (большую часть времени, которое вы хотели x=1 бы). Затем каждый экземпляр может провести опрос SQS для выполнения работы и не потребует дополнительной работы, пока он занят.

Вы также получите другие преимущества, такие как возможность видеть, сколько времени требуется для завершения сообщения, и возможности обработки ошибок для учета тайм-аутов или сбоев сервера во время выполнения работы.