2 puntos por GN⁺ 2024-09-29 | 1 comentarios | Compartir por WhatsApp

Introducción

  • En 2017, Discord compartió cómo migró su base de datos de MongoDB a Cassandra para almacenar mensajes
  • Cassandra ofrece escalabilidad, tolerancia a fallos y facilidad de mantenimiento, pero con el tiempo aumentaron los problemas de rendimiento y la carga de mantenimiento
  • En 2022, Discord volvió a migrar su base de datos, esta vez a ScyllaDB

Problemas con Cassandra

  • Estructura de almacenamiento de mensajes: los mensajes se almacenaban particionados por channel_id y bucket
  • Problema de particiones calientes: cuando el tráfico se concentraba en ciertos canales, aumentaba la latencia de toda la base de datos
  • Problemas de mantenimiento: el rendimiento se degradaba por las tareas de compactación de SSTable y los problemas de recolección de basura de la JVM

Cambios de arquitectura

  • Adopción de ScyllaDB: una base de datos compatible con Cassandra escrita en C++ que resolvió los problemas de recolección de basura
  • Servicio de datos: se colocó un servicio intermedio entre la API y la base de datos para regular el tráfico y mejorar el rendimiento
  • Uso de Rust: se utilizó Rust para escribir código concurrente seguro y rápido

Servicio de datos

  • Fusión de solicitudes: cuando varios usuarios pedían los mismos datos, se hacía una sola consulta a la base de datos y el resultado se compartía
  • Enrutamiento basado en hashing consistente: las solicitudes del mismo canal se dirigían a la misma instancia del servicio para reducir la carga sobre la base de datos

Migración a gran escala

  • Construcción del clúster de ScyllaDB: se configuró un almacenamiento rápido y duradero usando SSD locales y RAID
  • Migración de datos: los datos se trasladaron rápidamente usando un migrador de datos escrito en Rust
  • Validación automática de datos: se enviaron pequeñas cantidades de solicitudes de lectura a ambas bases de datos y se compararon los resultados para verificar la integridad de los datos

Unos meses después

  • Mejora de rendimiento: ofrecía mejor rendimiento que Cassandra con menos nodos
  • Reducción de latencia: el rendimiento de consulta e inserción de mensajes mejoró considerablemente
  • Nuevos casos de uso de producto: gracias a la mejora de rendimiento, fue posible implementar nuevas funciones

# Resumen de GN⁺

  • Discord migró su base de datos a ScyllaDB para resolver los problemas de rendimiento de Cassandra
  • Con un servicio de datos escrito en Rust y ScyllaDB, logró gestionar el tráfico de forma eficiente y mejorar el rendimiento
  • Durante la migración de datos, utilizó métodos rápidos y eficientes para completar el traslado sin tiempo de inactividad
  • Este artículo aborda los desafíos y las soluciones de una migración de base de datos a gran escala, por lo que resulta útil para quienes se interesan en la operación de sistemas a gran escala

1 comentarios

 
GN⁺ 2024-09-29
Comentarios en Hacker News
  • La entrada del blog critica al GC, pero en realidad el problema está en cómo usaban Cassandra o en cómo Cassandra maneja las eliminaciones masivas

    • "Cuando eliminaron millones de mensajes a través de la API, Cassandra tuvo que escanear millones de tombstones"
    • Mencionan el tuning del GC, pero en realidad estaban usando una versión antigua de Cassandra y de la JVM
  • Si hubieran usado un protocolo de chat distribuido, este problema no habría existido

    • Hay especificaciones abiertas y varias implementaciones, como IRC, Matrix y XMPP
    • Cuesta entender cómo Discord llegó a dominar el mercado
  • Comentario adicional del cofundador de ScyllaDB

    • Discord no podía completar reparaciones con Cassandra, pero sí es posible con Scylla
    • Scylla tiene muchas similitudes con Cassandra, pero prioriza las consultas mediante sus propios planificadores de CPU y de IO
    • Scylla tiene un nuevo modo tombstone_gc=repair
    • La nueva arquitectura de Raft y tabletas de Scylla se lanzó recientemente
  • La capa de servicio recuerda a Varnish Cache

    • No mencionaron el caché, pero es similar al "grace mode" de Varnish
    • Da gusto ver que el hashing consistente aparece una y otra vez
  • Eliminar mensajes antiguos es casi imposible

    • Esto es una pesadilla de privacidad, y da curiosidad por qué la UE no interviene
  • Es un artículo muy bien escrito

    • Cambiar de Cassandra a Scylla fue parte de la solución
  • La cantidad de nodos de almacenamiento de mensajes de Discord es menor de lo esperado

    • Se esperaba una arquitectura más compleja, pero en realidad solo usan 200 nodos
    • Parece que las arquitecturas modernas en la nube están sobreingenierizadas
  • Almacenar datos y hacer data mining son problemas distintos

  • El equipo de ScyllaDB priorizó las mejoras de rendimiento e implementó consultas inversas

    • Me pregunto cuánto pagaban antes de usar ScyllaDB
  • Discusión sobre "How Discord Stores Trillions of Messages"

    • En marzo de 2023 hubo 10 comentarios sobre esto