Tengo un servidor express que maneja toda la autenticación (usando token auth y tengo sesiones de almacenamiento redis para controlar la cantidad de inicios de sesión por dispositivo) y lectura/escritura en mongoDB.
Quiero agregar chat para mis usuarios (usando socket.io y socket.io-redis) y en lugar de codificarlo dentro del backend actual, me preguntaba cómo podría mantenerlo separado o si eso es incluso una buena idea.
Pensé que sería porque estoy implementando en un clúster k8s, pero me preguntaba cómo realizar la comunicación entre estos dos servidores.
Estoy usando el controlador nginx de ingreso donde abro el tráfico al backend en el balanceador de carga. Al principio pensé que enrutaría todo el tráfico desde el servidor entre el servidor de chat y los usuarios. ¿Pero ese no es el caso ya que el servidor de chat necesita conectarse directamente con los usuarios? Entonces, ¿cómo aseguraría la comunicación entre el backend y el servidor de chat, así como la comunicación entre el servidor de chat y los usuarios?
Tal vez estoy pensando demasiado en esto, pero se agradece cualquier idea.
Lo que terminé haciendo fue crear un servidor de autenticación, un servidor de API principal y un servidor de chat. La interfaz que apunta a auth.domain.com, api.domain.com, chat.domain.com.
El servidor de autenticación genera un JWT que se almacena en redis cuando un usuario inicia sesión. El servidor de API principal y el servidor de chat verifican redis para asegurarse de que el JWT sea válido y luego se ejecuta.
Debido a que todo esto se ejecuta en un clúster k8s y puede tener varias instancias, utilicé Pub/Sub, por lo que incluso si un usuario no está en el mismo servidor websocket (servidor de chat), aún recibirá.