Я хочу развернуть службу интерактивного рендеринга, использующую протокол WebSocket. Служба контейнерная и может обслуживать до N (скажем, 1 <= N <= 10) клиентов. Причина небольшого числа N в том, что каждое новое соединение создает новый процесс (внутри контейнера), которому предъявляются определенные требования к ресурсам. Я прочитал несколько руководств по балансировщикам нагрузки приложений, балансировщикам нагрузки служб, AWS Fargate и т. Д. Эти стратегии балансировки нагрузки в основном сосредоточены на загрузке ЦП или использовании памяти. Но я не смог найти никакой документации, которая описывает маршрутизацию «на основе соединения».
Существует ли метод / подсистема AWS, которая позволяет мне запускать новый контейнер (задачу?), Когда один из «текущих» контейнеров (задач?) (Почти) находится «вне мест»? Маршрутизация не должна направлять дальнейшие подключения к «полному» контейнеру, но существующие подключения этого полного контейнера не должны отбрасываться. Как только контейнер (задача?) Больше не имеет подключений, его следует остановить (если он не последний), чтобы не потреблять слишком много ненужных ресурсов.
Вы автор / разработчик этой услуги? Если да, то лучше переделайте ее, потому что то, что вы описываете, не является подходящей масштабируемой архитектурой.
Самое близкое к вашим заявленным требованиям - использовать AWS Lambda - Лямбды создаются для каждого запроса, т.е. если у вас 1 клиент, у вас будет работать 1 лямбда, если у вас 100 клиентов, у вас будет 100 запущенных лямбд. Автоматически. Обычно вы используете лямбды с AWS API Gateway как их интерфейс.
То же самое с ALB, ECS, Фаргейти т. д. потребует некоторой сложной оркестровки, которую вам придется разработать. Я бы не пошел по этому пути.
Используйте Lambda или измените архитектуру для пакетной обработки или чего-то подобного.
Надеюсь, это поможет :)