Discord hat seine technische Infrastruktur nicht aus Prinzip ständig umgestellt, sondern weil das Wachstum die ursprünglichen Entscheidungen überholt hat. Jede größere Umstellung folgte einem klaren Muster: Ein kritischer Schwellenwert wurde überschritten, und bestehende Lösungen konnten die Anforderungen nicht mehr erfüllen. Diese Strategie zeigt, wie wichtig es ist, Technologien nicht nach Belieben, sondern nach messbaren Kriterien zu wählen — und zu wechseln, wenn die Daten es erfordern.
Die ersten Jahre: Ein Stack für Geschwindigkeit
Als Discord 2013 startete, setzte das Team auf eine Kombination aus bewährten Technologien, die schnelle Entwicklung und zuverlässige Grundfunktionen boten. Die Echtzeit-Kommunikation wurde mit Elixir realisiert, das auf der BEAM-Virtual Machine läuft und sich besonders für verteilte Systeme eignet. Python übernahm die API-Entwicklung, während Go für Microservices genutzt wurde. Als Datenbank diente zunächst MongoDB, und die Desktop-Anwendung basierte auf Electron.
Diese Auswahl war typisch für Startups: Schnelle Prototypen, pragmatische Entscheidungen und der Fokus auf das Wesentliche. Doch schon bald zeigte sich, dass einige Komponenten nicht für die Skalierung ausgelegt waren, die Discord anstrebte.
Das erste große Upgrade: MongoDB scheitert an der Last
Mit fünf Millionen Nutzern im Jahr 2017 erreichte MongoDB seine Grenzen. Die NoSQL-Datenbank konnte die wachsende Datenmenge und die hohen Lese- und Schreibanforderungen nicht mehr bewältigen. Das Team entschied sich für einen Wechsel zu Cassandra, einer verteilten Datenbank, die besser für hohe Verfügbarkeit und horizontale Skalierung geeignet ist. Ein Cluster mit zwölf Knoten wurde aufgebaut und funktionierte zunächst zuverlässig.
Doch das Wachstum von Discord war rasant: Bis 2022 hatte sich die Nutzerzahl verzwanzigfacht, und der Cassandra-Cluster musste auf 177 Knoten erweitert werden. Die Verwaltung wurde zunehmend komplex, die Kosten stiegen, und die Performance litt unter der wachsenden Last. Als Lösung fiel die Wahl auf ScyllaDB, eine Cassandra-kompatible Datenbank, die in C++ implementiert ist und bessere Performance bei niedrigerem Ressourcenverbrauch bietet.
Eine einfache Rechnung zeigt die Herausforderung: Neun Jahre, drei Datenbanken — und jede Umstellung war eine Reaktion auf ein konkretes Performance-Problem.
Rust verdrängt Elixir und Go: Performance als treibende Kraft
Ein besonders prägnantes Beispiel für Discords Strategie ist der Wechsel von Elixir und Go zu Rust. 2019 stellte das Team fest, dass Elixir bei der Sortierung großer Datensätze zu langsam war: 170 Millisekunden pro Operation waren für die Anforderungen von Discord nicht akzeptabel. Die Lösung war der Umstieg auf Rust, eine Programmiersprache, die für ihre hohe Performance und Speichersicherheit bekannt ist. Der Wechsel reduzierte die Latenz auf nur noch eine Millisekunde — ein Unterschied, der für Millionen von Nutzern weltweit spürbar war.
Ein weiteres Beispiel betrifft den Read States Service, der verfolgt, welche Nachrichten ein Nutzer gelesen hat. Dieser Service wird bei jedem Öffnen der App, beim Senden einer Nachricht oder beim Lesen einer Nachricht aufgerufen. Ursprünglich in Go implementiert, litt die Performance unter dem Garbage Collector von Go, der alle zwei Minuten eine Speicherbereinigung durchführte. Bei Millionen von Nutzern, deren Daten im Speicher gehalten wurden, führte dies zu spürbaren Verzögerungen.
Nach mehreren Versuchen, den Garbage Collector von Go zu optimieren, entschied sich Discord für einen radikalen Schritt: die Neuentwicklung des Read States Service in Rust. Da Rust keinen Garbage Collector besitzt und Speicher direkt freigibt, sobald er nicht mehr benötigt wird, entfielen die Latenzspitzen vollständig. Die Performance verbesserte sich von Millisekunden auf Mikrosekunden — ein entscheidender Vorteil, besonders während der Pandemie 2020, als die Nutzerzahlen auf 100 Millionen monatlich stiegen.
Was blieb, was sich änderte: Eine Frage der Effizienz
Nicht alle Technologien bei Discord wurden ausgetauscht. Elixir bleibt weiterhin für die Echtzeit-Kommunikation im Einsatz, da die BEAM-VM ideal für Millionen gleichzeitiger Prozesse und schnelle Fehlerbehebung geeignet ist. Python wird weiterhin für APIs genutzt, und Electron bleibt die Grundlage für die Desktop-Anwendung. Die mobile Entwicklung wurde schließlich mit React Native vereinheitlicht, nachdem jahrelang separate Codebasen für iOS und Android gepflegt wurden.
Diese Entscheidungen zeigen ein klares Muster: Technologien werden nur dann ersetzt, wenn sie die Anforderungen nicht mehr erfüllen können. Hype oder Trends spielen dabei keine Rolle. Stattdessen setzt Discord auf messbare Kriterien und Daten, um eine fundierte Entscheidung zu treffen.
Die zentrale Lektion: Technologie nach Bedarf anpassen
Der Fall Discord unterstreicht eine wichtige Erkenntnis für Unternehmen jeder Größe: Technologie-Stacks sollten nicht nach Bauchgefühl oder aktuellen Trends gewählt werden, sondern nach den konkreten Anforderungen und dem Wachstumspotenzial. Jede Umstellung bei Discord hatte einen klaren Auslöser — eine Metrik, die eine Grenze überschritt, oder ein Problem, das sich durch Optimierung nicht mehr lösen ließ.
Die eigentliche Lehre liegt nicht darin, welche Programmiersprache oder Datenbank die beste ist, sondern darin, wann und warum ein Wechsel sinnvoll ist. Discord baute seine Infrastruktur nicht für 500 Millionen Nutzer am ersten Tag, sondern entwickelte sie schrittweise weiter — immer mit dem Fokus auf die aktuellen Herausforderungen und den zukünftigen Bedarf.
KI-Zusammenfassung
Discord’un altyapısını neden sürekli yeniden yazdığına dair performans darboğazları, veritabanı değişiklikleri ve programlama dillerinin değişimiyle ilgili detaylar.