Cloudflare通过重构Big Pineapple平台的DNS缓存结构,在不更换硬件的情况下释放约100TB内存。该平台支撑1.1.1.1、Gateway DNS、DNS Firewall和AS112等服务,任意时刻保存超过2500亿条缓存记录。
在这种规模下,每条记录多1字节,整个集群就会多占250GB以上。工程团队因此从Rust容器的字段级开销入手,把写入后不再扩容的Vec和String换成Box<[T]>与Box<str>,每个字段减少8字节。
每条缓存记录有8个相关字段,理论上可减少64字节;按2500亿条计算,仅这一项节省超过15TB。团队还把数据、权威和附加记录从多个列表合并为一个,用u16偏移量标记区域,再省28字节。
owner字段也避免重复保存。大多数DNS记录所属域名与查询域名相同,缓存中可留空,读取时从键恢复;只有CNAME等所有者不同的情况,才额外存储完整域名。
原RecordData枚举按最大成员NAPTR分配空间,使常见A与AAAA记录承担无用容量。团队先把TXT、NAPTR、SVCB等大成员放入堆,再继续调整布局,因为单独分配也会损害内存局部性。
最终方案把记录数据保存为连续原始字节,每条只保留长度和编码内容,集中放进Box<[u8]>。A、AAAA、TXT和DNSSEC响应可直接复制编码结果;含域名的CNAME、NS、MX、SOA仍需解析以应用名称压缩。
连续布局令查询延迟进一步降低约5%,可复用临时缓冲区使缓存插入吞吐单独提高13%。5项优化合计把单条记录占用从953字节降到420字节,内存分配量从1.1KB降至461字节。
基准中,插入吞吐从每秒62.5万条升至89.3万条,提高43%;查询延迟由828纳秒降到670纳秒,降低19%。生产环境p99单实例常驻内存从9.3GB降到5.3GB,p90从6.5GB降到3.8GB。
部署从2026年5月18日开始,7月6日覆盖全部相关服务。稳定后集群工作集少用约100TB。Cloudflare计划把释放空间用于扩大DNS缓存,在总体内存不增加的条件下提高命中率、减少向上游服务器查询。
生产环境降幅小于单记录基准,是因为进程常驻内存还包含缓存之外的数据。缓存装得越满,结构优化带来的绝对节省越明显;因此p99与p90实例都下降约四成,而单条记录的理论降幅达到56%。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。