Балансировка нагрузки веб-сокетов на ECS? - PullRequest
0 голосов
/ 02 мая 2018

Я только начинаю понимать и решать эту проблему.

Решения Node.js Socket.io или Go Gorilla для веб-сокетов имеют пул соединений для каждого экземпляра. Поэтому в каждом случае я могу сказать «отправить сообщение клиенту ххх».

Однако, когда я пытаюсь масштабировать по горизонтали (порождая дополнительные экземпляры), каждый экземпляр имеет свой собственный пул клиентских подключений, поэтому попытка отправить сообщение определенному клиенту, который подключен к другому экземпляру, не удалась. Я предполагаю, что это потому, что текущий экземпляр не имеет доступа к подключению / пулу памяти этого экземпляра.

Я понимаю, что ECS автоматически масштабирует док-контейнеры по горизонтали, если бы мне пришлось раскрутить проект сервера WS в ECS и заставить его масштабировать другой экземпляр для службы, обрабатывает ли AWS разговор магическим образом между экземплярами сервера сокетов - или я должен обработать что?

1 Ответ

0 голосов
/ 24 мая 2018

Согласно MDN

WebSockets - это передовая технология, позволяющая открыть интерактивный сеанс связи между браузером пользователя и сервером.

Это означает, что каждый веб-сокет является постоянным соединением с конкретным сервером. Для передачи событий в сокеты, которые находятся на другом сервере, вам нужен адаптер. Например, если вы используете Socket.io, вы можете взглянуть на SocketIO Redis .

С другой стороны, для балансировки нагрузки вы можете использовать Application Load Balancer (ALB), который поддерживает веб-сокеты и контейнеризованные приложения в ECS.

...