Cloudflare 这次对 1.1.1.1 解析器的 DNS 缓存做了次大调整,把内存表示重新设计了一遍。单个条目的基准空间占用减少了 56%,整个集群大约释放了 100 TB 工作集内存。优化之后,插入吞吐量提升了 43%,查询延迟降低了 19%,目前已经全量部署到生产环境。
一次大幅度的缓存瘦身
Cloudflare 的 1.1.1.1 是很多人每天都在用的公共 DNS 解析器,缓存中条目数以亿计。这次优化直接对缓存的内存表示下手,每个条目的基准空间占用砍掉了 56%,整个集群释放出大约 100 TB 的工作集内存。内存占用降下来了,效率却上去了,插入吞吐量提高 43%,查询延迟降低 19%。
五轮迭代,把 Rust 的潜力挖出来
整个优化不是推倒重来,而是在 Rust 的缓存表示上迭代了五轮。第一步,把固定的数据类型从 Vec 和 String 换成了 Box 形式。别看这只是个小改动,每个条目立刻省下 64 字节,整个集群累计节省超过 15 TB。后面的调整更抠细节:合并应答和权限记录,改成带紧凑偏移量的列表;把布尔值打包成位标志;省略掉与查询域名匹配的所有者名称。每一步都在跟字节较劲。
最终设计:直接用 DNS 有线格式
最后定下来的方案很有意思:把记录数据一股脑放进连续的字节缓冲区,完全按照 DNS 有线格式来存。这样一来,按记录分配的开销直接消失,内存局部性也好了不少。常用的记录类型可以直接复制到响应里;包含域名的记录就得稍微解析一下,以便做 DNS 名称压缩。这个思路和 Unbound、PowerDNS Recursor 这些递归解析器的缓存架构完全不一样——Cloudflare 盯上的是单个缓存条目的表示和分配开销。
生产环境实测:p99 内存从 9.3GB 降到 5.3GB
这次优化从 2026 年 5 月 18 日开始灰度,到 7 月 6 日全面上线。生产环境的数据很能说明问题:p99 水平下,每实例驻留内存从 9.3 GB 降到了 5.3 GB;p90 水平下,从 6.5 GB 降到 3.8 GB。基准测试里,每个条目的内存占用从 953 字节降到 420 字节,内存分配从 1.1 KB 降到 461 字节。省下来的内存怎么用?Cloudflare 打算直接增加缓存容量,整体内存消耗不涨,同样资源下能缓存更多域名,命中率更高,解析自然也更快。
如果你正在规划企业上云,DNS 解析速度和稳定性直接影响用户体验。找一家靠谱的阿里云代理商,比如易枫顺 - 阿里云官方旗舰级代理商,能帮你更省心地搞定云资源部署。
FAQ
Q: Cloudflare 这次 DNS 缓存优化为什么能省下这么多内存?
A: 关键在于把缓存条目从原来的 Rust 结构体改成了紧凑的 DNS 有线格式,存放在连续字节缓冲区里。这样每条记录不再需要单独的分配开销,同时合并了不少冗余字段,布尔值打包,所有者名称省略,最后单个条目内存占用从 953 字节降到了 420 字节。
Q: 缓存优化会影响 DNS 解析的准确性吗?
A: 不会。优化的是内存表示,不是缓存逻辑。记录内容、过期时间这些语义全都没动,只是物理存放方式变了。生产环境实测查询延迟还降了 19%,解析速度和准确性都没有退步。
Q: 普通用户能感知到这次优化吗?
A: 普通用户可能感觉不到具体延迟数字,但应该会觉得解析更流畅。尤其是在大量域名解析的场景,比如很多子域名、CDN 解析,优化后缓存命中率提高,等待时间会变短。
关于易枫顺
深圳市易枫顺网络科技有限公司是阿里云官方旗舰级代理商。提供云服务器ECS、云数据库RDS、对象存储OSS等阿里云全系产品官方特惠折扣与代金券申请,以及多云成本优化、企业上云一站式服务。客服热线:19520841949 - 易枫顺
来源:InfoQ