How we saved 100 terabytes of memory by optimizing 1.1.1.1’s DNS cache
Oleh Zai · Let's Make It Easy
Dipublikasikan 2026-08-28
## 1. Apa masalahnya pada DNS cache skala besar? How we saved 100 terabytes of memory by optimizing 1.1.1.1’s DNS cache
1. Apa masalahnya pada DNS cache skala besar?
Cloudflare menjelaskan bagaimana timnya mengurangi penggunaan memory pada Big Pineapple, platform yang mendukung 1.1.1.1 dan beberapa layanan DNS lain. Sistem ini menyimpan lebih dari 250 miliar entry pada satu waktu. Dengan jumlah sebesar itu, overhead kecil pada satu entry dapat berubah menjadi biaya hardware yang besar di seluruh fleet.
Artikel Cloudflare menyebut lima perubahan bertahap pada cara cache entry disimpan. Hasil yang dilaporkan adalah pengurangan footprint per entry lebih dari 50 persen dan memory yang terbebas sekitar 100 TB. Tim juga mengukur insert throughput yang naik 43 persen serta lookup latency yang turun 19 persen. Angka tersebut adalah hasil pada workload Cloudflare, bukan janji bahwa setiap service Rust akan mendapat peningkatan sama.
2. Mengapa Vec dan String menjadi perhatian?
Entry cache yang sudah disimpan tidak selalu perlu bertumbuh lagi. Namun Vec dan String membawa informasi kapasitas untuk mendukung pertumbuhan. Cloudflare mengganti sejumlah field dengan bentuk boxed yang ukurannya mengikuti data final, termasuk Box<[T]> dan Box<str>. Dokumentasi Rust menjelaskan bahwa Box dapat menyimpan nilai di heap dan menyediakan bentuk boxed slice untuk data berukuran tetap.
Tim juga mengurangi jumlah list terpisah dengan menyimpan satu list dan offset untuk bagian answer, authority, serta additional. Mereka mengemas beberapa boolean menjadi bit flag dan menghindari penyimpanan owner name ketika nilainya sama dengan domain pada cache key. Setiap keputusan terlihat kecil, tetapi efeknya berulang pada setiap entry.
3. Apa yang bisa dipakai engineer lain?
Mulailah dari pengukuran, bukan asumsi. Cache besar perlu diukur dengan traffic mix yang mendekati kondisi nyata karena ukuran record, occupancy, allocator, dan data di luar cache ikut memengaruhi hasil. Cloudflare sendiri mencatat bahwa benchmark mereka adalah pendekatan dan melakukan pengukuran resident memory pada instance produksi saat rollout.
Untuk service milik Anda, cari data yang immutable tetapi masih memakai struktur growable, allocation yang berulang, pointer yang tidak perlu, atau metadata yang bisa dipulihkan dari key. Setelah itu, ukur juga latency dan throughput. Penghematan memory yang menambah kerja CPU bisa menjadi pertukaran yang buruk.
Uji perubahan satu per satu supaya efeknya bisa ditelusuri. Catat ukuran struct, jumlah allocation, resident memory, dan distribusi latency sebelum serta sesudah perubahan. Cara ini lebih lambat daripada langsung menyalin pola dari artikel, tetapi menghindari optimasi yang hanya cocok pada allocator, traffic mix, atau bentuk data milik orang lain.
Checklist praktisnya: pisahkan data dari instruksi, batasi permission, dan anggap output agent sebagai hasil yang tetap harus diuji.