Cloudflare: Zstandard in Pingora könnte Petabyte an Cache-Speicher sparen
We could save petabytes of cache storage with Zstandard and Pingora

Cloudflare hat mit Cache Transcoding einen Prototyp entwickelt, der geeignete Cache-Inhalte mit dem Zstandard-Algorithmus (zstd) komprimiert, bevor sie auf die Festplatte geschrieben werden. Die Komprimierung erfolgt innerhalb des Pingora-Proxys und reduziert die Dateigröße im Schnitt auf etwa ein Drittel. Dies spart Speicherplatz und reduziert den Datenverkehr zwischen den Rechenzentren, erfordert aber etwas mehr CPU-Leistung. Erste Tests mit über einer Million Anfragen bestätigen die Effektivität. Der Artikel beschreibt die Funktionsweise, die Auswahlkriterien für komprimierbare Inhalte und die Ergebnisse der Leistungstests.
Eine kleine Erhöhung der CPU-Leistung verschafft Cloudflare Petabyte an effektiver Cache-Kapazität und reduziert die zwischen unseren Rechenzentren übertragenen Daten.
- r3trohack3r
Randnotiz: Ich habe vor ein paar Jahren einen ähnlichen Ansatz verfolgt, um das npm-Registry auf der Festplatte um über 90 % zu komprimieren. Da die meisten Versionen eines Pakets ähnlich sind, kann man sie zuerst delta-kodieren und dann komprimieren. Die Deltas sind klein und lassen sich zusammen mit den ursprünglichen Quelldateien gut komprimieren.
Für einen anderen Anwendungsfall habe ich vor der Komprimierung einen rollierenden Hash verwendet, um die Datei deterministisch aufzuteilen. Dann habe ich die Chunks komprimiert und in einem CID-Dateisystem gespeichert. Das Ergebnis ist, dass Dateien, die weitgehend ähnlich sind, sich komprimierte Chunks teilen.
Es gibt viele Dinge, die wir tun können, um mit den Computern, die wir haben, erheblich effizienter umzugehen, aber Ingenieure kosten oft mehr als Hardware. Mit den jüngsten Engpässen in der Lieferkette ändert sich diese Rechnung jedoch!
- thinkindie
Warum nicht Dateien komprimiert ausliefern, wenn der Client es unterstützt, auch wenn der Ursprungsserver eine unkomprimierte Datei geliefert hat?
- CodesInChaos
Ich bin verwirrt, wie sich das auf Range-Requests auswirkt. Ohne Komprimierung können diese leicht erfüllt werden, indem man den relevanten Teil der gecachten vollständigen Datei liest. Aber wie werden sie jetzt gehandhabt? Der Artikel behauptet, "Range-Requests bleiben unverändert", aber ich sehe nicht, wie das möglich ist, wenn der Cache die unkomprimierten Daten nicht mehr speichert.