Chat Plugin: Desempenho em Escala - Desativando Retenção e Uso Pesado da API?

Estou explorando um caso de uso alternativo para o plugin Discourse Chat e tenho algumas perguntas sobre seus limites de desempenho, especificamente em relação à retenção de dados e uso intensivo da API.

Para fornecer algum contexto, estamos procurando um sistema de comentários com encadeamento. O recurso de “respostas encadeadas” dentro do plugin Chat oferece uma experiência de usuário muito mais próxima de nossas necessidades do que a estrutura padrão de tópico/postagem. Por esse motivo, estamos considerando usar canais de chat como threads de comentários persistentes.

Por causa desse caso de uso, precisaríamos manter o histórico do chat indefinidamente. Isso leva à nossa principal preocupação: desempenho em uma escala muito grande.

Nosso uso projetado é alto:

  • Total de Mensagens: Algo entre 1 a 10 milhões de mensagens.

  • Canais: Aproximadamente 150 a 200 canais.

Nossas perguntas principais são:

  1. É possível desabilitar completamente a retenção de chat ou aumentá-la para suportar o número de mensagens mencionado? Por exemplo, definindo o período de retenção como 0 ou um número muito grande.

  2. Como o desempenho da API seria afetado? Planejamos usar intensamente as APIs do plugin Chat para integrar com nosso sistema externo. Nosso principal padrão de acesso seria buscar mensagens em ordem cronológica (mais recentes para mais antigas) tanto para os canais principais quanto para os threads. Esse tipo de polling frequente da API em canais com históricos massivos criaria uma carga significativa no servidor?

  3. Qual seria o impacto geral de desempenho no servidor e no banco de dados de armazenar milhões de mensagens de chat permanentemente? Especificamente, como isso afetaria:

    • Uso de CPU e RAM do servidor?

    • Responsividade geral do site?

  4. Existem pontos de “quebra” conhecidos ou limites suaves onde o desempenho do sistema começa a degradar significativamente sob esse tipo de carga?

Entendemos que este é um uso não convencional do plugin de chat e que desabilitar a retenção não é uma boa prática. Nosso objetivo é determinar os limites arquitetônicos do sistema — tanto na interface do usuário quanto via API — antes de nos comprometermos com essa abordagem.

Qualquer insight da equipe ou de membros da comunidade que já executaram o chat em grande escala seria incrivelmente valioso.

4 curtidas

Olá @Nima1, posso começar a responder algumas dessas perguntas:

Sim, é possível. Você pode definir os dias de retenção do canal de chat para “0” para reter mensagens para sempre — mas, dada a escala do que você está fazendo, você está certo em se perguntar sobre os impactos no desempenho. Também observo que atualmente não suportamos a pesquisa de mensagens de chat (está em nossos pensamentos, mas não está planejada no momento). Isso significa que, mesmo que você esteja retendo mensagens para sempre, dado o alto uso do seu projeto, pode não ser viável para os membros encontrarem mensagens específicas.

Não tenho certeza sobre as respostas para essas perguntas, deixe-me verificar com alguns dos engenheiros que mais trabalharam no chat para ver o que eles pensam.

Eu também adoraria saber mais sobre seu caso de uso — você estaria disposto a compartilhar mais detalhes sobre o que você está buscando?

2 curtidas

Olá Lindsey,

Obrigado pela resposta e por verificar com a equipe de engenharia. Terei prazer em compartilhar mais sobre nosso caso de uso.

Estamos construindo uma comunidade para entusiastas de criptomoedas. Para cada ativo de cripto importante, queremos criar um canal dedicado e persistente para discussão em tempo real.

Descobrimos que o modelo padrão de tópico/postagem não é ideal para isso porque:

  1. Ritmo e Formato: As conversas são rápidas e consistem em mensagens curtas, atualizações e reações, o que se encaixa naturalmente no formato de chat.

  2. Fluxo de Informações: Nossos usuários precisam ver as mensagens mais recentes primeiro e rolar para cima para o histórico recente, que é o comportamento padrão no chat. Em contraste, os tópicos são projetados para serem lidos cronologicamente do mais antigo para o mais novo.

As respostas encadeadas e a exibição cronológica reversa do plugin de chat são uma combinação perfeita para a experiência do usuário que queremos criar.

Nosso principal desafio é a escala. Como teremos um canal para cada ativo, prevemos a necessidade de centenas de canais, cada um potencialmente contendo um histórico muito longo. É por isso que estamos tão interessados nos limites de desempenho.

Estamos comprometidos em usar o Discourse por causa de seus poderosos recursos de moderação, gerenciamento de usuários e gamificação, que são críticos para a construção de uma comunidade saudável.

Aguardo ansiosamente para saber o que os engenheiros pensam. Obrigado novamente!

Obrigado por compartilhar mais sobre o que você espera fazer, @Nima1!

Após conversar com nossa equipe, receio que não possamos falar com certeza sobre como o desempenho seria impactado por esse volume de mensagens — não temos muitas pessoas usando o chat neste momento nessa escala e onde você escolher hospedar seu site terá um grande impacto.

Você pretende auto-hospedar o Discourse?

2 curtidas

Olá, obrigado pela resposta rápida e por verificar com a equipe!

Para responder à sua pergunta: sim, estamos auto-hospedando. Eu já configurei a instância.