Token导航 LogoToken导航

Cloudflare 重构 1.1.1.1 DNS 缓存内存 节省 100TB

更新时间 2026-10-13来源 InfoQ正文 1153字阅读约 4分钟2 张图片
作者 | Leela Kumili
译者 | 平川

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 名称压缩。

图片

Cloudflare 的 DNS 缓存使用 DNS 有线格式将记录数据存储为连续的字节缓冲区(图片来源:Cloudflare 博客文章)

该方法与其他递归 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。

图片

Cloudflare 生产环境内存使用图(图片来源:Cloudflare 博客文章)

基准测试显示,每个条目的内存占用从 953 字节降到了 420 字节,内存分配从 1.1 KB 降至 461 字节。插入吞吐量提高了 43%,查询延迟降低了 19%。在整个集群中,这些改动释放了约 100 TB 的工作集内存。Cloudflare 计划利用这部分内存来增加缓存容量,而又不增加整体内存消耗。

https://www.infoq.com/news/2026/09/cloudflare-dns-cache/

声明:本文为 InfoQ 翻译,未经许可禁止转载。

文章标签AI资讯
资讯来源:由AI资讯编辑整理自互联网公开内容,版权归原作者所有,未经许可,不得转载。

继续浏览更多资讯

返回资讯目录

相关资讯

更多