26 puntos por xguru 2023-07-04 | 3 comentarios | Compartir por WhatsApp
  • A medida que Discord creció, fue reemplazando continuamente la base de datos de almacenamiento de mensajes
  • Al principio usaba un solo MongoDB. En noviembre de 2015, cuando la cantidad de mensajes llegó a 100 millones, quedaron en evidencia los límites de MongoDB
  • En 2017 migró a Cassandra con un clúster de 12 nodos para almacenar decenas de miles de millones de mensajes
  • En 2022, los mensajes se dispararon a billones, la infraestructura creció enormemente hasta 177 nodos, la latencia se volvió impredecible y los costos de mantenimiento se hicieron extremadamente altos
  • En Cassandra, el problema de Discord eran las hot partitions. Ciertas partes de la DB se sobrecargaban, lo que degradaba el rendimiento de toda la aplicación
    • Como la estructura interna de datos de Cassandra usa árboles LSM, el costo de lectura es mayor que el de escritura, y las lecturas concurrentes de varios usuarios en un solo servidor crean hotspots y provocan degradación del rendimiento
    • Tareas de mantenimiento como la compactación de SSTables afectaban el rendimiento general y agravaban el problema
  • Por eso iniciaron un rediseño de la arquitectura integrando varios componentes
    • Aprovecharon una API monolítica, un servicio de datos implementado en Rust y un sistema de almacenamiento basado en ScyllaDB (una DB compatible con Cassandra desarrollada en C++)
  • Con la adopción de ScyllaDB se lograron mejoras significativas
    • La p99 read latency se redujo a 15ms, frente a los 40~125ms de Cassandra
    • La p99 write latency se redujo a 5ms, frente a los 5~70ms de Cassandra
  • Los ingenieros de Discord escribieron el servicio de datos en Rust
    • Usaron la característica de fearless concurrency de Rust para controlar el tráfico concurrente sobre hot partitions
    • Las librerías y capacidades de concurrencia de Rust se ajustaban muy bien a los requisitos de Discord
    • El servicio de datos actúa como intermediario entre el monolito de la API y el clúster de base de datos

3 comentarios

 
pmc7777 2023-07-05

Justo estaba investigando el stack tecnológico de Discord, ¡gracias!

 
secret3056 2023-07-04

Cómo Discord almacena miles de millones de mensajes

El GC de Go implica una sobrecarga bastante grande, por lo que se siguen agregando métodos de ajuste y se están introduciendo aspectos como las arenas de memoria.