2 pontos por GN⁺ 2024-09-29 | 1 comentários | Compartilhar no WhatsApp

Introdução

  • Em 2017, o Discord compartilhou como migrou o banco de dados de MongoDB para Cassandra para armazenar mensagens
  • O Cassandra oferece escalabilidade, tolerância a falhas e facilidade de manutenção, mas com o tempo os problemas de desempenho e a carga de manutenção aumentaram
  • Em 2022, o Discord migrou novamente o banco de dados, desta vez para ScyllaDB

Problemas no Cassandra

  • Estrutura de armazenamento de mensagens: as mensagens eram armazenadas com particionamento por channel_id e bucket
  • Problema de partições quentes: quando o tráfego se concentrava em canais específicos, a latência de todo o banco de dados aumentava
  • Problemas de manutenção: houve degradação de desempenho devido à compactação de SSTables e aos problemas de coleta de lixo da JVM

Mudanças na arquitetura

  • Adoção do ScyllaDB: banco de dados compatível com Cassandra, escrito em C++, que resolveu os problemas de coleta de lixo
  • Serviço de dados: foi colocado um serviço intermediário entre a API e o banco de dados para controlar o tráfego e melhorar o desempenho
  • Uso de Rust: Rust foi usado para escrever código concorrente seguro e rápido

Serviço de dados

  • Mesclagem de requisições: quando vários usuários solicitam os mesmos dados, o banco é consultado apenas uma vez e o resultado é compartilhado
  • Roteamento com hash consistente: as requisições do mesmo canal são roteadas para a mesma instância de serviço, reduzindo a carga no banco de dados

Migração em grande escala

  • Construção do cluster ScyllaDB: configuração de armazenamento rápida e durável com SSDs locais e RAID
  • Migração de dados: os dados foram transferidos rapidamente usando um migrador de dados escrito em Rust
  • Validação automática de dados: pequenas quantidades de requisições de leitura foram enviadas aos dois bancos para comparar os resultados e verificar a integridade dos dados

Alguns meses depois

  • Melhoria de desempenho: ofereceu desempenho melhor que o Cassandra com menos nós
  • Redução da latência: o desempenho de leitura e inserção de mensagens melhorou significativamente
  • Novos casos de uso de produto: graças à melhora de desempenho, tornou-se possível implementar novos recursos

# Resumo do GN⁺

  • O Discord migrou o banco de dados para ScyllaDB para resolver os problemas de desempenho do Cassandra
  • Com um serviço de dados escrito em Rust e o ScyllaDB, conseguiu gerenciar o tráfego de forma eficaz e melhorar o desempenho
  • No processo de migração de dados, usou métodos rápidos e eficientes para concluir a transição sem downtime
  • O texto aborda os desafios e as soluções de uma migração de banco de dados em larga escala, sendo útil para quem se interessa pela operação de sistemas de grande porte

1 comentários

 
GN⁺ 2024-09-29
Comentários no Hacker News
  • O post do blog critica o GC, mas na prática o problema estava no modo como o Cassandra era usado ou em como o Cassandra lida com exclusões em massa

    • "Quando milhões de mensagens foram excluídas pela API, o Cassandra precisou varrer milhões de tombstones"
    • Fala-se em ajuste de GC, mas na prática estavam usando versões antigas do Cassandra e da JVM
  • Se tivessem usado um protocolo de chat distribuído, esse problema não existiria

    • Há especificações abertas e várias implementações, como IRC, Matrix e XMPP
    • É difícil entender como o Discord dominou o mercado
  • Comentário adicional do cofundador da ScyllaDB

    • O Discord não conseguia concluir reparos com Cassandra, mas com Scylla isso é possível
    • A Scylla tem muitos pontos em comum com o Cassandra, mas prioriza consultas por meio de seus próprios escalonadores de CPU e IO
    • A Scylla tem um novo modo tombstone_gc=repair
    • A nova arquitetura com Raft e tablets da Scylla foi lançada recentemente
  • A camada de serviço lembra o Varnish Cache

    • Não mencionaram cache, mas é semelhante ao "grace mode" do Varnish
    • É bom ver hashing consistente aparecendo repetidamente
  • Excluir mensagens antigas é quase impossível

    • Isso é um pesadelo de privacidade, e dá para se perguntar por que a UE não intervém
  • Artigo muito bem escrito

    • A migração de Cassandra para Scylla fez parte da solução
  • O número de nós de armazenamento de mensagens do Discord é menor do que o esperado

    • Eu esperava uma arquitetura mais complexa, mas na prática usam apenas 200 nós
    • As arquiteturas modernas de nuvem parecem superprojetadas
  • Armazenar dados e fazer mineração de dados são problemas diferentes

  • A equipe da ScyllaDB priorizou melhorias de desempenho e implementou consultas reversas

    • Fico curioso para saber quanto estavam pagando antes de usar a ScyllaDB
  • Discussão sobre "How Discord Stores Trillions of Messages"

    • Em março de 2023, havia 10 comentários