Cloudflare重构DNS缓存释放约100TB内存
Cloudflare重新设计了1.1.1.1解析器所使用的Big Pineapple DNS缓存内存表示,将单个缓存条目的基准空间占用从953字节降至420字节,降幅达到56%。这套改造还让缓存插入吞吐量提升43%,查询延迟下降19%,整个服务器集群释放了约100TB工作集内存。Big Pineapple同时维护着超过2500亿个DNS缓存条目。
这项优化围绕Rust缓存结构连续进行了五轮调整。第一步是把插入后不会变化的数据从Vec和String改用Box保存,每个条目减少64字节,集群累计节省超过15TB内存。随后,团队将应答、权限及其他DNS记录合并为带紧凑偏移量的列表,把布尔字段压缩为位标志,并省略与查询域名相同的所有者名称,改为通过缓存键重建。
枚举布局是其中较难处理的部分。团队曾尝试将较大的枚举变体单独装箱,以缩小主体结构,但额外的内存分配和间接访问削弱了缓存局部性。最终方案采用DNS有线格式,把记录数据放入连续字节缓冲区,既避免枚举和逐条记录分配的开销,也改善了数据局部性。常用记录类型可以直接复制到响应中;包含域名的记录则仍需解析,以完成DNS名称压缩。
这种设计取向不同于其他递归解析器。Unbound将消息、RRset、键和负缓存分别维护,并允许配置缓存大小与分块参数;PowerDNS Recursor则提供数据包缓存、记录缓存等多类缓存。相比之下,Cloudflare此次改造主要针对单个缓存条目的表示方式及内存分配成本。方案已于2026年5月18日至7月6日期间完成生产环境全面部署,每个实例的驻留内存p99从9.3GB降至5.3GB,p90则由6.5GB降至3.8GB。
基准测试显示,单条目的内存分配量也从1.1KB降至461字节。结合吞吐、延迟和内存占用方面的改进,集群获得了约100TB可用工作集空间。Cloudflare计划利用这部分空间扩充DNS缓存容量,同时不提高整体内存消耗。
本文基于公开渠道信息整理,内容可能存在不准确或遗漏之处,不代表本站立场,如内容涉及侵权或错误,请联系我们处理。
阅读原文