sql >> Base de Datos >  >> NoSQL >> Redis

¿Ideas para escalar el chat en AWS?

Crear un servicio de chat no es tan fácil como parece.

He construido servidores XMPP completos, clientes y SDK y puedo dar fe de algunos de los problemas sutiles y difíciles que surgen. Un prototipo donde los usuarios se ven y chatean es fácil. Un sistema de funciones completas con creación de cuentas, seguridad, descubrimiento, presencia, entrega fuera de línea y listas de amigos es un desafío mucho mayor. Luego, escalar eso a través de un número arbitrario de servidores es especialmente difícil.

PubSub es una característica que ofrecen los servicios de chat (consulte XEP-60) en lugar de un medio tradicional de crear un servicio de chat. Puedo ver el atractivo, pero PubSub puede tener inconvenientes.

Algunas preguntas para ti:

  1. ¿Estás haciendo esto a través de la Web? ¿Los usuarios se conectarán y harán largas consultas o tiene una solución de Web Sockets?

  2. ¿Cuántos usuarios? ¿Cuántas conexiones por usuario? ¿Proporción de escrituras a lecturas?

  3. Su idea de usar SQS de esa manera es interesante, pero probablemente no escalará. No es inusual tener 50k o más usuarios en un servidor de chat. Si está sondeando cada SQS Queue para cada usuario, no se acercará a eso. Sería mejor tener una cola para cada servidor, y el servidor sondea solo esa cola. Luego depende de usted averiguar en qué servidor está un usuario y colocar el mensaje en la cola correcta.

Sospecho que querrás hacer algo como:

  1. Una gran base de datos RDS en el backend.
  2. Un montón de servidores front-end que manejan las conexiones de los clientes.
  3. Algunos códigos Java/C# de nivel medio rastrean todo y enrutan los mensajes al lugar correcto.

Para tener una idea de la complejidad de construir un servidor de chat, lea los RFC de XMPP:RFC 3920RFC 3921