2 Punkte von GN⁺ 2024-09-29 | 1 Kommentare | Auf WhatsApp teilen

Einführung

  • 2017 teilte Discord mit, wie das Unternehmen seine Datenbank von MongoDB auf Cassandra migrierte, um Nachrichten zu speichern
  • Cassandra bietet Skalierbarkeit, Fehlertoleranz und einfache Wartung, doch im Lauf der Zeit nahmen Performance-Probleme und der Wartungsaufwand zu
  • 2022 migrierte Discord die Datenbank erneut, diesmal zu ScyllaDB

Probleme mit Cassandra

  • Struktur der Nachrichtenspeicherung: Nachrichten werden partitioniert nach channel_id und bucket gespeichert
  • Hot-Partition-Problem: Wenn sich der Traffic auf bestimmte Kanäle konzentriert, steigt die Latenz in der gesamten Datenbank
  • Wartungsprobleme: Performance-Einbußen durch SSTable-Kompaktierung und Garbage-Collection-Probleme der JVM

Architekturänderungen

  • Einführung von ScyllaDB: Eine Cassandra-kompatible Datenbank, die in C++ geschrieben ist und die Garbage-Collection-Probleme löst
  • Datenservice: Zwischen API und Datenbank wurde ein Zwischendienst eingefügt, um den Traffic zu steuern und die Performance zu verbessern
  • Einsatz von Rust: Rust wurde verwendet, um sichere und schnelle nebenläufige Software zu schreiben

Datenservice

  • Request Coalescing: Wenn mehrere Nutzer dieselben Daten anfordern, wird die Datenbank nur einmal abgefragt und das Ergebnis gemeinsam genutzt
  • Routing auf Basis von Consistent Hashing: Anfragen für denselben Kanal werden an dieselbe Service-Instanz geleitet, um die Datenbanklast zu senken

Migration im großen Maßstab

  • Aufbau eines ScyllaDB-Clusters: Schnelle und langlebige Speicherarchitektur mit lokalen SSDs und RAID
  • Datenmigration: Die Daten wurden mithilfe eines in Rust geschriebenen Data Migrators schnell übertragen
  • Automatische Datenvalidierung: Kleine Mengen an Leseanfragen wurden an beide Datenbanken gesendet und die Ergebnisse verglichen, um die Datenintegrität zu prüfen

Einige Monate später

  • Verbesserte Performance: Bessere Leistung als Cassandra mit weniger Nodes
  • Reduzierte Latenz: Die Performance beim Abrufen und Einfügen von Nachrichten wurde deutlich verbessert
  • Neue Produkt-Use-Cases: Durch die Performance-Verbesserungen konnten neue Funktionen umgesetzt werden

# GN⁺-Zusammenfassung

  • Discord migrierte seine Datenbank zu ScyllaDB, um die Performance-Probleme von Cassandra zu beheben
  • Mit einem in Rust geschriebenen Datenservice und ScyllaDB konnte das Unternehmen den Traffic effizient steuern und die Performance verbessern
  • Im Migrationsprozess wurden schnelle und effiziente Methoden eingesetzt, um die Umstellung ohne Downtime abzuschließen
  • Der Artikel behandelt die Herausforderungen und Lösungen einer groß angelegten Datenbankmigration und ist daher nützlich für alle, die sich für den Betrieb großer Systeme interessieren

1 Kommentare

 
GN⁺ 2024-09-29
Hacker-News-Kommentare
  • Der Blogbeitrag gibt dem GC die Schuld, aber tatsächlich liegt das Problem in der Art, wie Cassandra verwendet wurde, oder darin, wie Cassandra Massenlöschungen verarbeitet

    • „Als Millionen von Nachrichten über die API gelöscht wurden, musste Cassandra Millionen von Tombstones scannen“
    • Es wird zwar über GC-Tuning gesprochen, tatsächlich wurden aber eine alte Version von Cassandra und der JVM verwendet
  • Mit einem verteilten Chat-Protokoll hätte es dieses Problem nicht gegeben

    • Es gibt offene Spezifikationen und mehrere Implementierungen wie IRC, Matrix und XMPP
    • Es ist schwer zu verstehen, wie Discord den Markt dominieren konnte
  • Zusätzlicher Kommentar des Mitgründers von ScyllaDB

    • Discord konnte Reparaturen mit Cassandra nicht abschließen, mit Scylla aber schon
    • Scylla hat vieles mit Cassandra gemeinsam, priorisiert Abfragen jedoch über eigene CPU- und IO-Scheduler
    • Scylla hat einen neuen Modus tombstone_gc=repair
    • Scyllas neue Raft- und Tablet-Architektur wurde kürzlich veröffentlicht
  • Die Service-Schicht erinnert an Varnish Cache

    • Caching wurde nicht erwähnt, aber es ähnelt dem „grace mode“ von Varnish
    • Es ist schön zu sehen, dass konsistentes Hashing immer wieder auftaucht
  • Das Löschen alter Nachrichten ist fast unmöglich

    • Das ist ein Albtraum für die Privatsphäre, und ich frage mich, warum die EU nicht eingreift
  • Ein sehr gut geschriebener Artikel

    • Der Wechsel von Cassandra zu Scylla war ein Teil der Lösung
  • Die Zahl der Message-Storage-Nodes bei Discord ist geringer als erwartet

    • Ich hatte eine komplexere Architektur erwartet, tatsächlich werden aber nur 200 Nodes verwendet
    • Moderne Cloud-Architekturen wirken übertechnisiert
  • Daten zu speichern und Data Mining darauf zu betreiben, sind zwei unterschiedliche Probleme

  • Das ScyllaDB-Team hat Leistungsverbesserungen priorisiert und Reverse Queries implementiert

    • Ich frage mich, wie viel dafür bezahlt wurde, bevor ScyllaDB eingesetzt wurde
  • Diskussion zu „How Discord Stores Trillions of Messages“

    • Im März 2023 gab es 10 Kommentare dazu