Cloudflare 将 1.1.1.1 DNS 缓存的内存占用削减了 100TB
阅读完需:约 4 分钟
单条目节省 64 字节源于 Box 替代 Vec/String;合并 DNS 记录为紧凑偏移列表并位打包布尔字段;重构枚举变体以避免装箱导致的局部性退化。
适合 DNS 系统工程师、Rust 高性能系统开发者、大规模缓存架构师阅读。
在任何时刻,Big Pineapple 都存储着超过 2500 亿个 DNS 缓存条目。Cloudflare 系统工程师 Sebastiaan Neuteboom 在 LinkedIn 上这样描述了这一成果:
能节省 100 TB 的内存,这可不是每天都能遇到的。
这项工作对 Rust 的缓存表示形式连续进行了五次迭代优化。Cloudflare 首先将插入后固定不变的数据类型从 Vec 和 String 替换为 Box[T]> 和 Box
对于这种权衡,一位 Reddit 评论者是这样总结的:
许多这种类型的内存优化技巧只有在达到 Cloudflare 的请求量级别时才能发挥作用;在规模比较小的情况下,将变体进行装箱所造成的额外间接访问,对缓存局部性的损害可能大于其实际益处。
Cloudflare 的最终设计采用 DNS 有线格式,将记录数据存储在连续的字节缓冲区中。这既消除了枚举和按记录分配的开销,又提高了局部性。常用的记录类型还可以直接复制到响应中,而包含域名的记录仍然需进行解析以实现 DNS 名称压缩。

该方法与其他递归 DNS 解析器所采用的缓存架构有所不同。例如,Unbound 维护着独立的消息、RRset、键和负缓存,其缓存大小和分块设置均可配置;而 PowerDNS Recursor 则使用多种缓存类型,包括数据包缓存和记录缓存。相比之下,Cloudflare 的工作重点在于减少单个缓存条目的表示和分配开销。
该优化已于 2026 年 5 月 18 日至 7 月 6 日期间在生产环境中全面部署。在 p99 水平下,每个实例的驻留内存从 9.3 GB 降至 5.3 GB,而在 p90 水平下,内存消耗从 6.5 GB 降至 3.8 GB。

基准测试显示,每个条目的内存占用从 953 字节降到了 420 字节,内存分配从 1.1 KB 降至 461 字节。插入吞吐量提高了 43%,查询延迟降低了 19%。在整个集群中,这些改动释放了约 100 TB 的工作集内存。Cloudflare 计划利用这部分内存来增加缓存容量,而又不增加整体内存消耗。
原文链接:https://www.infoq.com/news/2026/09/cloudflare-dns-cache/
规模效应下的极致内存优化,Box 替代、位打包、有线格式紧凑缓冲区的思路值得 Rust 高性能与缓存架构团队借鉴;中小规模需权衡装箱带来的局部性损失。