Erro de carga extrema

Uma coisa importante a ter em mente aqui é que as implementações de “chat” geralmente transmitem o conteúdo real para os assinantes.

No Discourse, temos um pipeline bastante complexo, o que torna a implementação ingênua complicada e resulta em grandes volumes de tráfego.

  1. O usuário publica uma resposta
  2. Todos os usuários visualizando o tópico descobrem via transmissão que há novo conteúdo
  3. Todos os usuários solicitam o conteúdo da postagem ao servidor (100 visualizadores = 100 solicitações)
  4. Extraímos imagens / otimizamos imagens
  5. Todos os usuários visualizando o tópico descobrem via transmissão que há novo conteúdo
  6. Todos os usuários solicitam o conteúdo da postagem ao servidor (100 visualizadores = 100 solicitações)

(Temos várias otimizações, limites de taxa, tentativas de reenvio e assim por diante, mas essa é a essência)

Todas essas solicitações precisam passar pelo nosso pipeline de segurança para garantir que o usuário tenha permissão para ver a postagem e assim por diante.

Se o conteúdo fosse relativamente curto e pudéssemos de alguma forma descobrir como fazer a segurança de maneira mais leve para a “pista rápida”, poderíamos distribuir as mensagens de chat via transmissão. Isso resultaria em um desempenho significativamente melhor; provavelmente poderíamos atender 10.000 usuários em um único droplet Digital Ocean de baixo custo com 2 GB de RAM com esse design.

A segurança é muito complexa. O cache também é complexo devido a problemas de invalidação de cache.

Portanto, sim, estamos absolutamente pensando nesse problema. Mas, no momento…

Muitos visualizadores logados em um único tópico + muito conteúdo novo em um único tópico = contas de servidor caras.