Error de carga extremo

Un punto importante a tener en cuenta aquí es que las implementaciones de “chat” generalmente transmiten el contenido real a los suscriptores.

En Discourse tenemos un pipeline bastante complejo que hace que la implementación ingenua sea complicada, lo que genera grandes cantidades de tráfico.

  1. Un usuario publica una respuesta.
  2. Todos los usuarios que están viendo el tema descubren mediante transmisión que hay nuevo contenido.
  3. Todos los usuarios solicitan al servidor el contenido de la publicación (100 espectadores = 100 solicitudes).
  4. Extraemos imágenes y las optimizamos.
  5. Todos los usuarios que están viendo el tema descubren mediante transmisión que hay nuevo contenido.
  6. Todos los usuarios solicitan al servidor el contenido de la publicación (100 espectadores = 100 solicitudes).

(Tenemos varias optimizaciones, límites de tasa, reintentos, etc., pero esa es la idea general).

Todas estas solicitudes deben pasar por nuestro pipeline de seguridad para garantizar que el usuario tenga los derechos necesarios para ver la publicación, entre otros aspectos.

Si el contenido fuera algo breve y pudiéramos encontrar una forma de implementar la seguridad de manera más ligera para la “carril rápido”, podríamos distribuir los mensajes de chat mediante transmisión. Esto daría lugar a un rendimiento significativamente mejor; probablemente podríamos manejar 10 000 usuarios en un solo droplet de Digital Ocean de 2 GB con ese diseño.

La seguridad es muy compleja. La caché también lo es debido a los problemas de invalidación de caché.

Así que, sí, definitivamente estamos pensando en este problema. Pero tal como están las cosas…

Muchos espectadores conectados en un solo tema + mucho contenido nuevo en un solo tema = facturas de servidor costosas.