AWS - Балансировка нагрузки для службы ECS с ограничением жестких соединений на контейнер - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть контейнер, развернутый на ECS Fargate в качестве службы.Контейнер должен обслуживать длинные HTTP-соединения Websocket и выполнять обработку в реальном времени.Каждое соединение может жить от нескольких минут до нескольких часов в разных случаях использования.

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

Приложение AWS Балансировщик нагрузки находится в начале этой службы.По обычным правилам автомасштабирования - количество контейнеров можно уменьшать или уменьшать с помощью мониторинга CPU.Это приложение Application Balancer использует алгоритм циклической маршрутизации для каждого входящего запроса.

Мой вопрос:

Имея требование постоянного предела HARD соединений для контейнера, как я могу заставить ALB не маршрутизироватьновое соединение с контейнером без доступного слота соединения?

Сам сервис внутри контейнера - может ли он сообщить ALB, что он закрыт для новых соединений?Может быть, по конкретному HTTP-ответу?

Есть ли еще какие-либо полезные методы для обработки этого требования?

1 Ответ

0 голосов
/ 03 октября 2018

Для этого вам потребуется написать собственный код.

Возможное решение - объединить:

  • Автоматическое масштабирование
  • Крюки жизненного цикла
  • Удаление экземпляра контейнера.

Ваш код должен будет определить, сколько соединений он обрабатывает.Когда число достигнет вашего предела 10, удалите контейнер из группы автоматического масштабирования.Используя ловушки жизненного цикла, вы можете сохранить контейнер живым.Как только ваши 10 соединений достигнут 0, завершите завершение контейнера.

Обратите внимание, что это приведет к запуску нового контейнера, пока вы сливаете контейнер, который достиг своего пика.

ДонНе знаю другого метода, чтобы сказать ALB прекратить отправку трафика в определенный контейнер, не удаляя его.Они являются ключом draining и termination lifecycle, так как вы хотите, чтобы контейнер продолжал иметь соединения с клиентом.

...