-
作者
-
發佈日期
2026-08-29
-
閱讀時間
7分鐘
-
字體大小
Cloudflare 公布重新設計旗下公共 DNS 服務 1.1.1.1 快取資料結構,令整套系統節省約 100TB 記憶體。公司在基準測試中,將每件快取所佔記憶體由 953 位元組降至 420 位元組,跌幅達 56%,同時加快快取讀寫速度。
Big Pineapple 承載逾 2,500 億筆快取
支撐 1.1.1.1 運作 DNS 基礎架構名為 Big Pineapple,除了 1.1.1.1 本身外,亦同時服務 Gateway DNS 及 DNS Firewall 等產品,系統內經常保持逾 2,500 億筆 DNS 快取記錄。以此規模計算,即使每筆快取只多用 1 位元組,Cloudflare 全站就要多耗超過 250GB 記憶體,可見任何微小節省都會被大幅放大。Cloudflare 今年 7 月中曾發文介紹 Big Pineapple 採用 ARC 快取取代舊有 KV Store 架構,並利用一致性雜湊技術令同一網域查詢固定由同一批伺服器節點處理,藉此提升快取命中率,成為這次記憶體最佳化的技術基礎。
五項 Rust 層面改動逐步節省空間
Cloudflare 團隊逐一檢視快取內每項儲存資料,移除保存後已無用途空間及重複資訊,一共進行五項改動。
第一步改動 Rust Vec 與 String 類型。Vec 除了保留資料本身指標及現有長度外,還會額外預留容量供日後擴充,但 DNS 回應存入快取後不會再修改內容,根本不需要額外容量。Cloudflare 改用固定大小 Box 系列類型,單件快取中 8 個 Vec 及 String 合共節省 64 位元組,連同原本多預留空間計算,2,500 億筆以上快取整體節省超過 15TB 記憶體。
第二步整理 DNS 回應儲存方式。DNS 回應包含回答、權威資訊、附加資訊三個區段,舊有做法為每區段分別建立清單,新方案將三區段合併為一個清單,再用兩個各佔 2 位元組的位置標記劃分邊界,單件快取節省 28 位元組。多個布林值亦改為以位元方式合併儲存,減少 Rust 為對齊記憶體位置而插入空白填充。
第三步移除重複儲存網域名稱。DNS 記錄通常會附帶所屬網域名稱,但實際上查詢網域名稱與記錄本身網域名稱大多相同。Big Pineapple 改為不重複儲存相同名稱,需要時直接從快取搜尋鍵重建,只有涉及 CNAME 等須指向另一網域名稱情況才完整儲存。
第四步重整 Rust 列舉型別 (enum) 處理方式。過往不論記錄類型大小,系統都統一預留 144 位元組空間以配合體積最大的 NAPTR 記錄,但 A 記錄實際只需 4 位元組,AAAA 記錄僅需 16 位元組,兩者合計已佔 Cloudflare DNS 流量 80% 以上。Cloudflare 將體積較大資料類型移至獨立記憶體區域存放,A 及 AAAA 記錄每筆可節省 120 位元組。
統一連續儲存兼顧速度與空間
不過將資料分散存放會增加記憶體配置次數,亦令處理器需要頻繁讀取分散各處資料,影響效率。Cloudflare 最終方案是將 DNS 記錄資料部分,以網絡傳輸格式編碼成位元組序列,統一存放於同一連續記憶體區域。資料集中存放後讀取更快,多數 DNS 記錄在組成回應時可直接複製整段位元組序列。基準測試顯示,此舉令快取搜尋時間縮短 5%,配合重複使用暫存緩衝區,每秒可加入快取的項目數量亦提升 13%。
綜合五項最佳化後,單件快取記憶體用量由 953 位元組降至 420 位元組,實際配置記憶體量亦由 1.1KB 降至 461 位元組。Cloudflare 補充,實際伺服器除了快取外,仍需處理其他工作,故整體節省比例會較小,但記憶體用量 99 百分位數 (p99) 常駐記憶體已由 9.3GB 降至 5.3GB,降幅達 43%。以整條 Big Pineapple 伺服器群計算,合共釋放約 100TB 記憶體,相當於 130 台 Cloudflare 第 13 代伺服器 RAM 總量。效能方面,快取寫入速度提升 43%,由每秒 625,000 件增至 893,000 件,查詢延遲則由 828 納秒縮短至 670 納秒,降幅 19%。Cloudflare 表示相關改動已在 2026 年 5 月 18 日至 7 月 6 日期間分階段推出至生產環境。
Cloudflare 計劃將節省約 100TB 記憶體用於擴大 DNS 快取容量,期望能在不增加整體記憶體用量的前提下,儲存更多回應內容。快取可保留回答數量增加後,查詢上游 DNS 伺服器次數亦會相應減少,公司透露仍在研究 Big Pineapple 快取進一步最佳化方案。
資料來源:Cloudflare Blog