Tu servidor Node.js con Socket.io maneja 10,000 conexiones WebSocket simultáneas. Al escalar a 3 instancias con un load balancer, los usuarios pierden mensajes. ¿Cómo lo resuelves?
Contexto
Plataforma de chat empresarial. Cada instancia de Node.js mantiene sus propias conexiones en memoria. Cuando un usuario conectado a la instancia A envía un mensaje a alguien en la instancia B, el mensaje no llega.
Respuesta modelo
El problema es que las conexiones WebSocket son stateful y locales a cada instancia. Solución: 1) Implementar un adapter de pub/sub (Redis Adapter para Socket.io) que sincronice eventos entre instancias. 2) Usar sticky sessions en el load balancer para que un cliente siempre reconecte a la misma instancia. 3) Para estado compartido (quién está online, typing indicators), usar Redis como store centralizado. 4) Implementar reconexión con cola de mensajes pendientes para manejar desconexiones temporales. 5) Monitorear con métricas por instancia (conexiones, memoria, event loop lag).
Claves
- Redis Adapter resuelve la comunicación cross-instance en Socket.io.
- Sticky sessions + pub/sub es el patrón estándar para WebSockets escalables.
- Siempre planificar para reconexión — las conexiones WebSocket se caen.