¿Qué necesidad tendrías de construir una aplicación de chat altamente concurrente y escalable? Las aplicaciones de chat generalmente no requieren mucha arquitectura para hacer lo que deben hacer. Esto suena como un caso de optimización prematura, pero aquí hay una discusión teórica:
Considere los siguientes casos de uso:
1) Hay tantas publicaciones en esta aplicación de chat que un solo servidor de tamaño mediano no podría manejar el tráfico: en este caso, ningún humano podría leer ni siquiera 1/100 de las publicaciones, lo que hace que la aplicación de chat sea inútil como una aplicación de chat Como tal, ni siquiera lo consideraremos.
2) Hay muchos usuarios que leen este chat, pero muy pocos usuarios escriben en el chat, lo que lo hace útil como una aplicación de chat, pero más como una aplicación para espectadores:
- ¿Cuál es la API de Salesforce.com más apropiada para usar al integrar una aplicación para crear, actualizar y eliminar datos en Salesforce.com?
- Cómo hacer un plan y crear una estructura para mi aplicación web
- Cuando registra una cuenta en un servicio de aplicación web, ¿las personas prefieren .domain.com o www.domain.com/ como su página de usuario? ¿Por qué?
- ¿Podemos construir aplicaciones web con algoritmos de aprendizaje automático Apache Mahout?
- Cómo crear una página web de manera fácil
En este caso, puede escalar horizontalmente sin tener que preocuparse por sincronizar las escrituras, por lo que tiene un servidor que maneja todas las solicitudes de escritura. Este servidor debe estar respaldado por un único servidor de base de datos y luego replica las escrituras en servidores secundarios.
Una granja de servidores de escala horizontal que maneja solicitudes de lectura persistentes de clientes debe escuchar los cambios en la base de datos y emitir los cambios a los clientes suscritos.
3) Los usuarios pueden escribir mensajes durante una hora al día y no pueden escribir el resto del tiempo. Por lo tanto, golpean los servidores durante una hora y solo se preocupan por leer los mensajes después de que todos hayan escrito. Por lo tanto, los mensajes no necesitan ser entregados en tiempo real.
En este caso, el rendimiento de escritura debería poder escalar, mientras que las lecturas pueden retrasarse. Esto se puede lograr al dividir las solicitudes de escritura en diferentes servidores de bases de datos y luego cotejar los datos en un almacén de datos final unificado en lotes periódicamente.
4) Las aplicaciones de chat persona-persona como WhatsApp que maximizan el hardware pueden llevar cada grupo de chat y convertirlo en una combinación de servidor / servidor de base de datos y emitir nuevos mensajes y procesar nuevas escrituras para ese grupo. Esto permite mensajes de baja latencia y garantiza que la aplicación pueda escalar horizontalmente agregando más servidores en paralelo.