26 pontos por xguru 2023-07-04 | 3 comentários | Compartilhar no WhatsApp
  • À medida que crescia, o Discord continuou trocando o banco de dados de armazenamento de mensagens
  • No início, usava um único MongoDB. Em novembro de 2015, quando o número de mensagens chegou a 100 milhões, os limites do MongoDB ficaram evidentes
  • Em 2017, migrou para um cluster Cassandra de 12 nós para armazenar bilhões de mensagens
  • Em 2022, com o salto para trilhões de mensagens, a infraestrutura cresceu enormemente para 177 nós, a latência ficou imprevisível e o custo de manutenção se tornou altíssimo
  • No Cassandra, o problema do Discord eram as hot partitions. Partes específicas do banco ficavam sobrecarregadas, degradando o desempenho de toda a aplicação
    • Como a estrutura interna de dados do Cassandra usa árvores LSM, o custo de leitura é maior do que o de escrita, e leituras simultâneas de vários usuários em um único servidor criavam hotspots e levavam à queda de desempenho
    • Tarefas de manutenção como compactação de SSTables também afetavam o desempenho geral, agravando ainda mais o problema
  • Por isso, a empresa partiu para um redesenho da arquitetura, integrando vários componentes
    • Aproveitando uma API monolítica, um serviço de dados implementado em Rust e um sistema de armazenamento baseado em ScyllaDB (banco compatível com Cassandra desenvolvido em C++)
  • A adoção do ScyllaDB trouxe melhorias significativas
    • A latência de leitura p99 caiu para 15 ms, contra 40~125 ms no Cassandra
    • A latência de escrita p99 caiu para 5 ms, contra 5~70 ms no Cassandra
  • Os engenheiros do Discord escreveram o serviço de dados em Rust
    • Usaram o recurso de fearless concurrency do Rust para controlar o tráfego simultâneo sobre hot partitions
    • As bibliotecas e os recursos de concorrência do Rust se encaixaram muito bem nas exigências do Discord
    • O serviço de dados atua como intermediário entre o monólito da API e o cluster de banco de dados

3 comentários

 
pmc7777 2023-07-05

Eu estava justamente pesquisando sobre a stack técnica do Discord, obrigado!

 
secret3056 2023-07-04

Como o Discord armazena bilhões de mensagens

O GC do Go tem uma sobrecarga bastante grande, por isso continuam sendo adicionadas formas de tuning e recursos como memory arenas.