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 deLoadBalancer
clienteA
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?