Масштабирование WebSockets с очередью сообщений

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

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

Я имел в виду архитектуру, заключающуюся в том, чтобы узлы сервера websocket размещались за балансировщиком нагрузки, что создает проблему, поскольку клиенты, подключенные к разным узлам, не будут знать друг о друге. Хотя оба клиентаA а такжеB войти черезLoadBalancerклиентA может иметь открытое соединение с узлом1 пока клиентB подключен к узлу2 - каждый узел содержит свой собственный словарь открытых соединений сокетов.

Чтобы решить эту проблему, я подумал об использовании такой системы MQ, какZeroMQ или жеRabbitMQ, Все узлы сервера websocket будут подписчиками сервера MQ, и когда узел получит запрос на маршрутизацию сообщения клиенту, которого нет в словаре локальных соединений, он будетpub-пишите сообщение на сервер MQ, который расскажет всеsub-scriber узлы для поиска этого клиента и выдачи сообщения, если он подключен к этому узлу.

Q1: Имеет ли эта архитектура смысл?

Q2: Этоpub-sub описанный здесь шаблон действительно то, что я ищу?

Ответы на вопрос(1)

Ваш ответ на вопрос