Cloudflare zmniejszyło ilość wykorzystywanej pamięci podręcznej DNS w swoim resolverze 1.1.1.1 o ponad połowę, zwalniając około 100 TB pamięci RAM w całej sieci. Firma nie wymieniła sprzętu serwerowego ani nie usunęła modułów pamięci. Tak potężną ilość zasobów udało się zwolnić przez zmianę sposóbu przechowywania danych DNS w pamięci podręcznej.
Optymalizacji dokonano w Big Pineapple, platformie, która służy do buforowania DNS firmy Cloudflare. To właśnie ona stoi za popularnym resolverem 1.1.1.1, zaporą sieciową DNS i kilkoma innymi oferowanymi przez nich usługami DNS. Zaledwie pięć zmian w kodzie Rust, które zmniejszyło typowy wpis w pamięci podręcznej z 953 bajtów do 420 bajtów.
Zmiany przyspieszyły również działanie pamięci podręcznej. Cloudflare poinformował, że przepustowość wstawiania wzrosła z 625 000 do 893 000 wpisów na sekundę, a opóźnienie wyszukiwania spadło z 828 nanosekund do 670 nanosekund. Podczas wdrażania, od połowy maja do początku lipca, zużycie pamięci p99 na instancję spadło z 9,3 GB do 5,3 GB.
100 TB pamięci RAM odzyskanej przez Cloudflare to mniej więcej tyle, ile pamięci w 130 serwerach Gen 13, z których każdy zawiera 768 GB pamięci DDR5-6400. Firma rozważała konfigurację 1152 GB dla tej generacji serwerów, ale zrezygnowała z niej po rozważeniu kosztów pamięci RAM o większej pojemności.
Cloudflare twierdzi, że Big Pineapple przechowuje ponad 250 miliardów wpisów DNS w dowolnym momencie, a przy takiej skali nawet niewielkie ilości zmarnowanej pamięci szybko się kumulują. Firma szacuje, że jeden niepotrzebny bajt w każdym wpisie pamięci podręcznej kosztuje ponad 250 GB w skali globalnej.
Mniej pamięci, a DNS działa szybciej
Jedna z największych zmian dotyczyła typów Vec i String w Rust. Te kontenery są zaprojektowane z myślą o rozrastaniu się, więc oprócz samych danych przechowują dane o pojemności. Jednak rekordy DNS nie muszą się rozszerzać po wejściu do pamięci podręcznej. Cloudflare zastąpiło te struktury blokami o stałym rozmiarze, eliminując bezużyteczne metadane. Firma twierdzi, że sama ta zmiana pozwoliła zaoszczędzić ponad 15 TB pamięci RAM.
Inżynierowie przeprojektowali również sposób rozmieszczania odpowiedzi DNS w pamięci. Big Pineapple przechowywał wcześniej trzy oddzielne listy rekordów dla każdej odpowiedzi. Nowy projekt umieszcza rekordy w jednym buforze i identyfikuje je za pomocą dwubajtowych przesunięć.
Pamięć podręczna nie przechowuje już nazw właścicieli, gdy po prostu powtarzają oni domenę, której dotyczy zapytanie. Cloudflare odbudowuje te nazwy podczas obsługi odpowiedzi. Teraz przechowuje również dane rekordów jako surowe bajty w formacie wire z prefiksami długości. Ta zmiana rozwiązuje problem niedopasowania we wcześniejszej wersji. Czterobajtowy rekord IPv4 A zajmował te same 144 bajty, co największy typ rekordu DNS buforowany przez Cloudflare, stosunkowo rzadki rekord NAPTR. Przechowywanie surowych danych w formacie o zmiennej długości zmniejsza to marnotrawstwo.
Spodobało Ci się? Podziel się ze znajomymi!



Pokaż / Dodaj komentarze do:
Cloudflare odzyskało 100 TB pamięci RAM. Wystarczyły zmiany w kodzie Rust