ithome
其他
采集 2026-08-29T10:10:02+00:00
Cloudflare优化1.1.1.1 DNS缓存省下100TB内存
原始标题:Cloudflare 为 1.1.1.1 瘦身:不换硬件省下 100TB 内存,DNS 查询延迟降低 19%
来源
ithome
发布时间
2026-08-29T08:57:13
采集批次
2026-08-29-10
字数
1726
URL 指纹
d8b867b5ff4e2dac
📌 AI 总结(304 字)
Cloudflare通过对旗下Big Pineapple平台底层Rust数据结构进行重构优化,在不增加硬件的情况下释放约100TB内存资源,单实例p99常驻内存从9.3GB降至5.3GB,降幅达43%。优化措施包括将Vec和String替换为Box<[T]>和Box<str>、合并DNS响应列表减少指针开销、利用owner字段省略重复域名、调整enum存储方式以及将记录数据改为连续字节布局。最终单条缓存记录内存占用从953字节降至420字节,减少56%;缓存查询延迟降低19%,插入吞吐量提升43%。该优化已于2025年逐步完成部署,Cloudflare计划利用释放的内存扩大DNS缓存容量以提升命中率。
📄 正文(1726 字)
IT之家8月29日消息,Cloudflare昨日发布博客,称其通过对旗下Big Pineapple平台的DNS缓存数据结构进行优化,成功释放了约100TB的内存资源。 Big Pineapple是Cloudflare旗下支撑1.1.1.1、Gateway DNS、DNS Firewall、AS112等多项DNS服务的平台。该平台在任何时刻均存储超过2500亿条DNS缓存条目。在这一规模下,每条缓存记录哪怕只多占用1字节,整个集群也会额外消耗超过250GB内存。 Cloudflare强调,此次优化并非依赖新硬件,而是完全通过对Rust语言编写的数据结构进行重构实现。 首先大家要知道,DNS缓存由键值对组成。键用于标识查询的域名、记录类型、认证状态等信息;值则保存DNS响应的网络数据、权威和附加记录,以及创建时间、TTL和命中次数等元数据。 Cloudflare优化首先针对Rust中Vec和String的内存开销展开。由于DNS响应写入缓存后不会继续修改,Vec用于动态扩容的capacity字段实际上已经没有必要。Cloudflare因此将相关结构替换为Box<[T]>和Box<str>,减少每个字段8字节的开销,同时避免为后续扩容预留额外空间。 每个缓存条目中共有8个相关的Vec和String字段,这一调整理论上可使每条记录减少64字节。按照超过2500亿条缓存记录计算,仅这一项优化带来的累计节省就超过15TB。 Cloudflare随后减少了DNS响应中多个列表产生的指针开销。原本数据、权威和附加记录分别存储在不同列表中,现在改为使用单个列表,并通过偏移量标记不同区域的起始位置。由于DNS记录数量可以使用u16表示,相关字段从指针和长度信息改为更小的偏移量,每个缓存条目又节省了28字节。 此外,Cloudflare还针对DNS记录中的owner字段进行了优化。多数情况下,记录所属域名与用户查询的域名完全相同,因此缓存时无需重复保存。只有CNAME等情况下记录所属域名不同,才会额外保存完整域名。读取缓存时,如果owner字段为空,则直接使用缓存键中的查询域名恢复。 Cloudflare还调整了Rust枚举enum的存储方式。原有RecordData枚举需要按照最大成员NAPTR的大小分配空间,导致常见的A和AAAA记录也要承担大量未使用的空间。由于A、AAAA记录占全部流量的80%以上,这种设计造成了明显浪费。 优化后,Cloudflare将较大的TXT、NAPTR、SVCB等枚举成员放入堆内存,而A、AAAA等体积较小且常见的记录继续直接存储。Cloudflare随后继续调整了数据布局,将DNS记录的数据部分直接保存为连续的原始字节,而不再为每种记录建立单独的解析后对象。每条记录由长度信息和原始数据组成,并集中存储在一个Box<[u8]>中。 这种方式取消了此前每个记录对应的枚举和独立堆分配,同时让数据连续排列,有利于CPU缓存命中。对于A、AAAA、TXT以及DNSSEC记录,生成DNS响应时可以直接复制已经编码的数据,无需重新逐字段序列化。 Cloudflare测试显示,这种数据布局使缓存查询延迟进一步降低约5%。由于缓存写入使用可重复利用的临时缓冲区,记录数据通常无需反复扩容,这一操作还使缓存插入吞吐量单独提升了13%。 据介绍,这些优化已于2025年5月18日开始逐步部署,并于7月6日完成在所有相关服务中的推广。生产环境数据显示,实例内存使用量在不同阶段持续下降。在p99情况下,单实例常驻内存从9.3GB降至5.3GB,减少43%。 基准测试中,这5项优化将单条缓存记录的内存占用从953字节降至420字节,总计减少56%;每条记录对应的内存分配量则从1.1KB降至461字节,减少58%。缓存插入吞吐量从每秒62.5万条提高至89.3万条,提升43%;缓存查询延迟从828纳秒降至670纳秒,降低19%。 Cloudflare表示,后续计划利用释放出来的内存扩大DNS缓存容量,同时不增加整体内存使用量,以提高缓存命中率并减少向上游DNS服务器发起的查询请求。