RAID als Cache: Discord baut eigenes Speichersystem in Google-Cloud
Discord betreibt seine Server in der Cloud - und baute sich ein schnelles und gleichzeitig sicheres Speichersystem.
Wie jeder datenintensive Dienst ist auch Discord darauf angewiesen, auf seinen Servern Daten möglichst schnell abzurufen. Interessant ist, dass das Unternehmen die Rechner, auf denen seine Datenbanken liegen, nicht selbst betreibt: Sie liegen in der Cloud von Google. Mit dem Speicherangebot waren die Entwickler aber unzufrieden, Google bietet nur eine schnelle oder eine sichere Variante an. Also bastelte Discord eine eigene Lösung.
Entwickler Glen Oakley führt im oben verlinkten Blog-Post aus, dass das Speichersystem in Stoßzeiten oft an seine Grenzen kam: Die Festplatten - Discord nutzt Googles Persistent Disks (GCP) - konnten die Anfragen der NoSQL-Datenbank nicht mehr bewältigen. Das führte zu langen Zugriffszeiten und Überschreitungen der Antwortzeit. Grund für das Problem ist, dass GCP selbst virtuelle Hardware ist. Der physische Speicher liegt in irgendeinem Storage Server und ist per Netzwerk mit dem Datenbank-Server verbunden. Beide befinden sich im selben Rechenzentrum.
Das hat einige angenehme Aspekte: Sicherungen können jederzeit erstellt werden, der Storage Server schützt mit RAID gegen Datenausfall und die virtuelle Festplatte kann beliebig vergrößert werden. Da aber die Anfragen durch zwei Rechner und möglicherweise mehrere Netzwerk-Switches laufen, brauchen die Antworten ziemlich lang, zwischen einer und zwei Millisekunden.
Lokaler und Cloud-Speicher als ideale Lösung
Die naheliegende Lösung, statt GCP lokale SSDs zu nutzen, kam für das Entwicklerteam von Discord nicht in Frage: Zu groß war die Angst vor Datenverlusten durch ausfallende Laufwerke oder ganze Server. Ausfallende Server fängt Googles Cloud zwar durch Umzug auf andere Hardware ab, die gespeicherten Daten sind dann aber futsch. Also suchte das Team nach anderen Lösungen.
Der erste Schritt war, die Anforderungen an das Speichersystem genau zu betrachten: Wichtig war, jederzeit ein Backup der Daten erstellen zu können und sie gegen den Ausfall einzelner Laufwerke geschützt zu wissen. Die Zugriffszeit ist für Discord nur beim Lesen von Daten wichtig. Schnell entdeckten die Entwickler die Kombination von GCP und lokalen SSDs als den richtigen Weg. Letztere werden dabei nur als Cache genutzt.
Zuerst untersuchte das Team dm-cache, lvm-cache und bcache, Caching-Module des Linux-Kernels. Die entsprachen aber nicht ganz den Ansprüchen des Teams, da sie bei Ausfällen der als Cache genutzten SSDs Fehler verursachten, die zum Ausfall der Datenbank führten.
Ein Software-RAID machts möglich
Die für sie perfekte Lösung fanden die Entwickler letztlich in einem Software-RAID namens md. Das hat ein wichtiges Feature: Es ermöglicht, die zusammengefassten Speicher für Lese- oder Schreiboperationen zu priorisieren. Mit dem Flag "write-mostly" wird festgelegt, dass ein Gerät beim Lesen nur die zweite Wahl ist. Auf sie wird nur zurückgegriffen, wenn kein anderes Gerät die gewünschten Daten bereitstellen kann.
Also packten Discords Entwickler ein lokal im Server installiertes RAID0 aus NVMe-SSDs mit dem GCP-Speicher in ein RAID1. Das verteilt die Zugriffe auf beide Speichersysteme, die SSDs werden so zu einem Cache der geschriebenen Daten. Damit warten die Server jetzt nur noch halb so lang auf Daten wie bei der vorherigen GCP-Lösung, die Datenbanken können mehr Anfragen bewältigen.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed










"Eine lokale NVMe kommt ja schon fast an RAM ran. " DDR2 RAM oder was?
Damit ist schon alles gesagt was ich auch hätte dazu schreiben können, danke. Es wird...
Erstmal interessant Thema, bei dieser Fragestellungen stehen momentan viele...
trotzdem erwähnenswert. An sich kann Linux auch allgemein besseres Tiering als nur mit...