Escalar WebSockets con una cola de mensajes

He construido unWebSockets servidor que actúa como un enrutador de mensajes de chat (es decir, recibe mensajes de clientes y los envía a otros clientes de acuerdo con un clienteID)

Es un requisito que el servicio pueda escalar para manejar muchos millones de conexiones de socket abierto concurrentes, y deseo poder escalar horizontalmente el servidor.

La arquitectura que he tenido en mente es colocar los nodos del servidor websocket detrás de un equilibrador de carga, lo que creará un problema porque los clientes conectados a diferentes nodos no se conocerán entre sí. Mientras que ambos clientesA yB entrar a través deLoadBalancerclienteA podría tener una conexión abierta con el nodo1 mientras que el clienteB está conectado al nodo2 - cada nodo tiene su propio diccionario de conexiones de socket abierto.

Para resolver este problema, estaba pensando en usar algún sistema MQ comoZeroMQ oRabbitMQ. Todos los nodos del servidor websocket serán suscriptores del servidor MQ, y cuando un nodo reciba una solicitud para enrutar un mensaje a un cliente que no está en el diccionario de conexiones locales, lo harápub-enunciar un mensaje al servidor MQ, que le dirá a todos lossub-scriber nodos para buscar este cliente y emitir el mensaje si está conectado a ese nodo.

Q1: ¿Tiene sentido esta arquitectura?

Q2: Es elpub-sub patrón descrito aquí realmente lo que estoy buscando?

Respuestas a la pregunta(0)

Su respuesta a la pregunta