- À 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
Eu estava justamente pesquisando sobre a stack técnica do Discord, obrigado!
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.
Por que escolher o ScyllaDB como substituto do Cassandra
Como o Discord minimizou a latência de discos de rede