Cloudflare 重新设计了其 1.1.1.1 解析器所使用的 DNS 缓存的内存表示,将每个条目的基准空间占用减少了 56%,并在整个服务器集群中释放了约 100 TB 的工作集内存。Cloudflare 对 DNS 平台 Big Pineapple 做的这些改动,使缓存插入吞吐量提高了 43%,并将查询延迟降低了 19%。
在任何时刻,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/