Speicherbedarf: Cloudflare gibt durch Optimierung 100 Terabyte RAM frei
Cloudflare hat die Speicherbelegung seines DNS-Dienstes 1.1.1.1 drastisch optimiert, indem das Speicherlayout der zugrunde liegenden DNS-Cache-Plattform namens Big Pineapple überarbeitet wurde. Wie das Unternehmen in einem Blogbeitrag schreibt(öffnet im neuen Fenster), speichert die Plattform zu jedem Zeitpunkt mehr als 250 Milliarden DNS-Cache-Einträge.
Bei einer so hohen Skalierung führe die Verschwendung von nur einem einzigen Byte pro Eintrag zu einem zusätzlichen Speicherbedarf von über 250 Gigabyte im gesamten Servernetzwerk, erklärte der Anbieter. Um den Bedarf zu reduzieren, führten die Entwickler fünf aufeinanderfolgende technische Optimierungen durch, die den Speicherbedarf pro Eintrag um mehr als die Hälfte senkten.
Zunächst wurden dynamische Datenstrukturen wie Vec und String durch unveränderbare Alternativen wie Box<[T]> und Boxᐸstrᐳ ersetzt. Da einmal im Cache abgelegte DNS-Antworten nicht mehr verändert werden müssen, war das sonst für die zukünftige Kapazität verwendete Feld nutzlos. Dieser Schritt sparte pro Eintrag 64 Byte und reduzierte den ungenutzten Heap-Speicher, was über alle Einträge hinweg bereits 15 Terabyte einsparen soll.
Netto-Speicherbedarf pro Cache-Eintrag um 56 Prozent gesenkt
Zudem wurden die separaten Listen für Antwort-, Autoritäts- und Zusatzsektionen zu einer einzigen Liste zusammengefasst, bei der die Abschnitte über platzsparende 2-Byte-Offsets (u16) adressiert werden, was weitere 28 Byte pro Eintrag einspart.
Die dritte Optimierung betraf den Domainnamen der einzelnen DNS-Einträge, der im Cache standardmäßig für jeden Datensatz komplett mit abgespeichert wurde. Da dieser Name in den allermeisten Fällen mit der tatsächlich angefragten Domain übereinstimmt, machten die Entwickler das Feld optional.
Als Viertes nahmen sie sich die Speichergröße des Rust-Datentyps Enum vor. Ein Rust-Enum belegt im Speicher standardmäßig immer so viel Platz wie seine größte Variante. Da die sehr selten genutzte Variante für NAPTR-Records 136 Byte groß war, belegte das gesamte Datensatz-Enum inklusive Padding 144 Byte, obwohl die über 80 Prozent des Traffics ausmachenden A- und AAAA-Records nur 4 bzw. 16 Byte benötigen.
Durch das Auslagern der selteneren großen Varianten wurde die Inline-Größe für die häufigen Typen auf 24 Byte geschrumpft, was pro A- und AAAA-Eintrag 120 Byte einspart. Um die Nachteile des Auslagerns zu umgehen, wurde als fünfter Schritt ein neuer Mittelweg gewählt. Die Datensätze werden nun im rohen DNS-Übertragungsformat (Wire-Format) als zusammenhängendes Byte-Array (Box<[u8]>) im Speicher abgelegt.
Als Ergebnis dieser Maßnahmen sank der Netto-Speicherbedarf pro Cache-Eintrag um 56 Prozent von 953 auf 420 Byte und die Allokationen wurden um 58 Prozent reduziert. In der Praxis führte dies zu einer dauerhaften Einsparung von rund 100 Terabyte an Arbeitsspeicher über die gesamte Serverflotte hinweg. Cloudflare plant, den freigewordenen Arbeitsspeicher zu nutzen, um die Cache-Kapazität weiter zu erhöhen.
- Anzeige Hier geht es zum Handbuch für Softwareentwickler bei Amazon Wenn Sie auf diesen Link klicken und darüber einkaufen, erhält Golem eine kleine Provision. Dies ändert nichts am Preis der Artikel.