Cloudflare1.1.1.1DNS内存优化,释放100TB工作集,性能提升43%

Cloudflare 对其 1.1.1.1 解析器的 DNS 缓存进行了深度优化,通过重新设计内存表示形式,将每个缓存条目的空间占用减少了 56%,并在整个集群中释放了约 100TB 的工作集内存。此...

互联网/IT

近日,全球领先的网络安全与性能服务提供商 Cloudflare 宣布对其核心 DNS 解析器 1.1.1.1 进行了一次革命性的内存优化。这项由系统工程师 Sebastiaan Neuteboom 主导的优化工作,不仅显著提升了系统的性能,还大幅降低了内存占用,为 Cloudflare 的基础设施带来了深远的影响。

作为互联网基础设施的重要组成部分,DNS 缓存的效率直接影响着用户的访问速度和体验。Cloudflare 的 Big Pineapple 平台每天需要处理超过 2500 亿个 DNS 缓存条目,这对内存资源的利用提出了极高的要求。为了应对这一挑战,Cloudflare 团队对 Rust 语言实现的缓存数据结构进行了连续五次迭代优化。

优化的核心在于减少单个缓存条目的内存开销。团队首先将不可变数据类型从 Vec 和 String 替换为 Box<[T]> 和 Box,仅此一项就为整个集群节省了超过 15TB 的内存。随后,他们通过合并记录类型、打包布尔值、省略域名存储等手段,进一步压缩了每个条目的大小。最复杂的部分是对 Rust 枚举类型的处理,团队最终采用 DNS 有线格式,将记录数据存储在连续的字节缓冲区中,既消除了枚举和按记录分配的开销,又提高了内存局部性。

这些优化带来的效果立竿见影。在生产环境中部署后,p99 水平下每个实例的驻留内存从 9.3GB 降至 5.3GB,在 p90 水平下则从 6.5GB 降至 3.8GB。基准测试显示,每个缓存条目的内存占用从 953 字节降到了 420 字节,内存分配从 1.1KB 降至 461 字节。插入吞吐量提高了 43%,查询延迟降低了 19%。

"能节省 100TB 的内存,这可不是每天都能遇到的成果。"Neuteboom 在 LinkedIn 上这样评价道。这项优化不仅让 Cloudflare 能够在不增加整体内存消耗的情况下扩大缓存容量,也为其他大规模分布式系统提供了宝贵的参考经验。

值得注意的是,这种级别的内存优化通常需要达到 Cloudflare 这样的请求量规模才能发挥作用。Reddit 上的一位技术专家评论道:"许多这种类型的内存优化技巧只有在达到 Cloudflare 的请求量级别时才能发挥作用;在规模比较小的情况下,将变体进行装箱所造成的额外间接访问,对缓存局部性的损害可能大于其实际益处。"

与传统的递归 DNS 解析器架构不同,Cloudflare 的优化重点在于减少单个缓存条目的表示和分配开销。例如,Unbound 维护着独立的消息、RRset、键和负缓存,其缓存大小和分块设置均可配置;而 PowerDNS Recursor 则使用多种缓存类型,包括数据包缓存和记录缓存。相比之下,Cloudflare 的方法更注重底层数据结构的紧凑性和高效性。

内存使用情况图表

此次优化已于 2026 年 5 月 18 日至 7 月 6 日期间在生产环境中全面部署,并将在未来持续影响 Cloudflare 的产品和服务。随着互联网流量的不断增长,类似的内存优化技术将成为保障大规模分布式系统高效运行的关键。

图中展示了两种缓存条目处理方式:左侧为已有缓存条目(owner == cache key),直接从堆中分配内存;右侧为新缓存条目(owner != cache key),需要完整存储所有信息,包括域名指针。

该图表显示了优化前后内存使用情况的变化,清晰地展现了优化带来的显著效果。