Warum Cloudflare selbst unbeliebte Inhalte im Arbeitsspeicher cached
(blog.cloudflare.com)Cloudflare hat in einem Blogbeitrag beschrieben, wie eine Änderung der Cache-Strategie die Schreiblast auf SSDs um bis zu 25 % gesenkt hat. (Englisch) Entgegen der gängigen Annahme erreichte Cloudflare dieses Ziel, indem das Unternehmen absichtlich auch Inhalte mit geringer Zugriffshäufigkeit im Arbeitsspeicher cached.
SSDs sind Speichermedien, die besonders anfällig für Schreibvorgänge sind. Die Flash-Speicherzellen, auf denen Daten gespeichert werden, lassen sich nur eine begrenzte Anzahl von Malen neu beschreiben. Außerdem dauert es vergleichsweise lange, bereits geschriebene Inhalte zu löschen und erneut zu schreiben, und dieser Vorgang verlangsamt sogar Leseoperationen. Daher ist es bei SSDs eine besonders wichtige Optimierung, Schreibvorgänge zu reduzieren.
Cloudflare verwendet in seinen Servern viele leistungsstarke NVMe-SSDs und musste sich mit diesem Thema daher zwangsläufig befassen. Cloudflare ist ein CDN-Anbieter, und ein CDN ist im Kern nichts anderes als ein großer Netzwerk-Cache. Die Inhalte, die auf den SSDs der Cloudflare-Server gespeichert werden, sind letztlich ebenfalls gecachte Objekte. Beobachtungen zeigten jedoch, dass darunter sehr viele Inhalte sind, auf die nach dem ersten Caching nie wieder zugegriffen wird – sogenannte „One-Hit Wonders“. Solche Objekte sollte man daher besser gar nicht erst auf SSDs schreiben. Experimente mit einem Ansatz, bei dem Objekte mit nur einem Zugriff nicht auf SSDs gespeichert werden, zeigten ein ermutigendes Ergebnis: Die SSD-Latenz sank um fast 5 %.
Die Herausforderung bestand darin, diese Idee im Maßstab eines realen Dienstes umzusetzen. Wenn beim ersten Zugriff nicht gecacht und erst ab dem zweiten Zugriff gespeichert wird, bedeutet das, dass sich die Zugriffe auf die Ursprungsdaten verdoppeln. Das würde selbstverständlich zusätzliche Kosten verursachen und den eigentlichen Zweck konterkarieren. Deshalb hat Cloudflare das Schreiben in den Cache in zwei Stufen gegliedert. Zunächst werden alle Objekte im Arbeitsspeicher als „Kurzzeit-Cache“ gespeichert. Nur Objekte mit mehreren Zugriffen werden dann „befördert“ und in den SSDs als „dauerhafter Cache“ abgelegt. Inhalte mit geringer Zugriffshäufigkeit werden so ganz natürlich aus dem Cache verdrängt. Um Lesezugriffe musste man sich nicht gesondert kümmern, denn das Lesen von der SSD wird ohnehin bereits gut vom Betriebssystem gecached.
Natürlich erfolgt die praktische Einführung dieser Idee in einem produktiven Dienst vorsichtig und konservativ. Der Ansatz verbraucht grundsätzlich viel Arbeitsspeicher, was mit dem bestehenden Cache des Betriebssystems konkurrieren kann. Zudem kann es bei Updates von Serverprozessen per Zero-Downtime-Deployment vorübergehend zu Speichermangel kommen, was sich letztlich negativ auf die Servicequalität auswirken könnte. Deshalb wird die Idee schrittweise nur auf neu eingeführten Servern mit ausreichend Speicher umgesetzt.
Die bisherigen Ergebnisse sind positiv. Nach Tuning der Cache-Größe gingen die SSD-Schreibvorgänge um 20 % bis maximal 25 % zurück, was wiederum die Latenz verringerte. Künftig will Cloudflare diese Technik auf mehr Server ausweiten, den Beförderungsalgorithmus verbessern, zusätzlich auch eine „Herabstufung“ einführen und eine hierarchische Struktur aufbauen, die nicht nur SSDs, sondern auch HDDs berücksichtigt.
Der erste Gedanke beim Lesen dieser Idee war für mich die Garbage-Collection-Technik von Java. Die grundlegende Annahme der meisten Garbage-Collection-Verfahren ist schließlich, dass [die meisten Objekte nur sehr kurze Zeit verwendet werden] – die sogenannte weak generational hypothesis. Vielleicht ist der oben beschriebene Ansatz so etwas wie eine abgewandelte Wiederverwendung dieses Prinzips.
3 Kommentare
Vielen Dank für den guten Artikel.
Ich habe den Eindruck, dass im Cloudflare-Blog immer wieder ziemlich viele lesenswerte Beiträge erscheinen.
Wie betreibt man einen guten technischen Unternehmensblog? https://de.news.hada.io/topic?id=1698
Bei Cloudflare scheint Blogging als Teil der Unternehmenskultur fest verankert zu sein.
Sehr interessant, danke.
Wow … sogar die Übersetzung gleich mit dazu, haha. Vielen Dank fürs Teilen des guten Inhalts.