智能工具库

释放 100TB 内存:Cloudflare DNS 架构优化实战

释放 100TB 内存:Cloudflare DNS 架构优化实战

Cloudflare 通过 Rust 优化 DNS 缓存,将单条目内存降低 56%,集群释放 100TB,吞吐提升 43%。

2026-10-05 0来源:InfoQ 中文

Cloudflare 1.1.1.1 DNS 缓存优化实战:如何释放 100TB 内存?

对于互联网基础设施而言,DNS 解析器的性能直接决定了用户体验。Cloudflare 的 1.1.1.1 解析器每天处理数以亿计的请求,其核心平台 Big Pineapple 需要在内存中存储超过 2500 亿个 DNS 缓存条目。在如此庞大的规模下,每一个字节的内存节省都至关重要。

近期,Cloudflare 通过五轮 Rust 内存表示优化,成功将 Big Pineapple 的单条目内存占用降低了 56%,并在整个服务器集群中释放了约 100TB 的工作集内存。同时,插入吞吐量提升了 43%,查询延迟降低了 19%。本文将深入解析这项优化背后的技术细节。

核心成果:数据说话

这次优化不仅是理论上的提升,更是实打实的性能飞跃。根据 Cloudflare 的基准测试数据:

  • 单条目内存:从 953 字节降至 420 字节。
  • 内存分配:从 1.1 KB 降至 461 字节。
  • 生产环境表现:p99 水平下,每个实例驻留内存从 9.3 GB 降至 5.3 GB;p90 水平下从 6.5 GB 降至 3.8 GB。
  • 吞吐与延迟:插入吞吐量提升 43%,查询延迟降低 19%。

这些数据表明,优化后的架构不仅节省了硬件成本,还显著提升了系统的响应速度。

技术实现:五轮迭代的优化细节

Cloudflare 的工程师们针对 Rust 的内存模型进行了深度的定制化改造,主要采取了以下策略:

1. 用固定大小替代动态分配

Rust 的 Vec 和 String 虽然灵活,但动态内存分配会带来额外的开销和碎片化。Cloudflare 首先将插入后不再修改的数据类型从 Vec 和 String 替换为 Box(指向堆上固定大小数据的指针)。这一简单的替换,就为每个条目节省了 64 字节,累计节省超过 15 TB 内存。

2. 数据紧凑化与位打包

为了进一步压缩空间,Cloudflare 采用了更底层的手段:

  • 合并记录:将应答(Answer)、权限(Authority)等记录合并为一个带有紧凑偏移量的列表,而不是独立存储。
  • 位打包:将布尔值(Flag)打包成位标志,而非占用整字节的布尔字段。
  • 省略冗余信息:省略了与查询域名匹配的“所有者名称”,转而通过缓存键直接重建,从而避免了重复存储。

3. 解决 Rust 枚举的装箱难题

这是优化中最棘手的部分。最初,Cloudflare 尝试对较大的枚举变体进行装箱,但这导致了内存局部性下降,且增加了间接访问的开销。一位 Reddit 评论者曾指出,在中小规模系统中,装箱带来的局部性损害可能大于收益,但在 Cloudflare 的规模下,优化收益巨大。

最终方案是采用 DNS 有线格式。这种方法将记录数据存储为连续的字节缓冲区,消除了枚举分配的开销,同时提高了缓存命中率。对于常用的记录类型,可以直接复制到响应中;而对于包含域名的记录,则利用 DNS 名称压缩技术。

架构启示:与主流方案的对比

不同于 Unbound 或 PowerDNS 等传统递归解析器通常维护独立的消息、RRset、键和负缓存,Cloudflare 的 Big Pineapple 更加聚焦于减少单个缓存条目的表示开销。

这种“极简主义”的缓存设计思路,对于开发者有以下启示:

  • 内存局部性至关重要:在高并发、大数据量场景下,减少间接访问和内存碎片比单纯追求代码的灵活性更重要。
  • 自定义数据结构:不要盲目使用标准库。针对特定业务场景(如 DNS 记录),自定义紧凑的数据结构往往能带来数量级的性能提升。
  • Rust 的威力:Rust 的所有权和内存安全机制,配合精细的内存管理,能够帮助开发者写出既安全又极致高效的系统。

Cloudflare 将节省下来的 100TB 内存用于扩容缓存,实现了在不增加硬件成本的前提下提升服务能力。这不仅是工程技术的胜利,更是大规模系统架构优化的典范。

适用人群

  • DNS 系统工程师:了解高并发解析器的架构设计。
  • Rust 高性能开发者:学习 Rust 在内存管理和性能优化上的实战技巧。
  • 大规模缓存架构师:参考如何通过数据结构优化解决内存瓶颈。

icon

icon

icon

icon

本文基于 InfoQ 中文 的公开内容,由 AI 辅助整理改写后发布。

原标题:Cloudflare 将 1.1.1.1 DNS 缓存的内存占用削减了 100TB

阅读原文