硬核优化!Cloudflare重设计1.1.1.1 DNS缓存结构,一口气释放100TB服务器内存

早报2个月前发布 小马良
92 0

全球知名CDN服务商Cloudflare最近完成了一项令人惊叹的底层性能优化。通过重新改造旗下公共DNS 1.1.1.1背后缓存条目在内存当中的存储布局,在不增加、更换任何物理内存条的前提下,从服务器集群里释放出了100TB空闲内存。不仅大幅削减硬件成本压力,DNS解析的吞吐量与响应延迟两项核心指标也同步获得提升。

  • 官方介绍:https://blog.cloudflare.com/dns-cache-memory-optimization-1111

Cloudflare的DNS解析平台Big Pineapple,任何时刻都保存着超过2500亿条DNS缓存记录。体量如此庞大,缓存结构里哪怕只是每一条条目浪费1字节内存,整体集群就要多消耗250GB内存资源,内存开销的放大效应十分惊人。

硬核优化!Cloudflare重设计1.1.1.1 DNS缓存结构,一口气释放100TB服务器内存

工程师团队一共落地了五项基于Rust语言的底层改造,最终单条缓存条目占用内存从原先953字节压缩至420字节,内存占用降幅达到56%。节省下来的100TB内存,换算成硬件资源,等同于130台搭载768GB DDR5‑6400内存的第13代服务器的全部内存容量。在近年服务器DDR5内存价格持续上涨的背景下,这次优化省下一笔非常可观的硬件开支。

五项关键优化手段

  1. 容器结构替换:用固定大小的盒装切片替代Rust当中可自动扩容的Vec、String容器。缓存生成完成之后,扩容字段便不再使用,砍掉这一部分开销,单这一项改动就省下超15TB内存。
  2. 合并记录列表:把一条DNS响应内部三份独立的记录列表,合并为一块缓冲区,依靠2字节偏移量完成索引读取。
  3. 域名数据延迟重建:删除缓存内部重复存储的查询域名,等到读取响应的时候再动态生成域名信息,去除重复冗余数据。
  4. 原始报文格式存储:DNS记录直接保存成带长度前缀的原始网络字节流,告别大小一刀切的存储方案。在此之前,仅占4字节的A记录,也要和体积庞大的NAPTR记录一样占用144字节存储空间,造成大量浪费。
  5. 数据连续打包存放:优化数据排布,改善CPU缓存局部性。绝大多数DNS记录可以直接从内存缓冲区复制发回用户,不再需要逐字段重新序列化,进一步降低CPU运算负担。

亮眼的性能提升数据

  • 缓存插入吞吐量:由每秒62.5万条上涨至89.3万条,提升 43%
  • 查询查找延迟:从828纳秒下降到670纳秒,延迟降低 19%
  • 单实例p99常驻内存占用:从9.3GB下降至5.3GB

本次DNS缓存项目,也是Cloudflare过去一年第二个大规模内存回收工程。上一次是去年9月,通过Rust重写请求处理层FL2。长期以来,能效都是该公司服务器硬件选型的核心指标,此前第12代服务器就选用AMD 96核EPYC处理器,就是为了兼顾算力与功耗。

而这次释放出来的100TB内存并不会被缩减硬件配置从而省钱。Cloudflare计划将多余内存用于扩容DNS缓存池。缓存容量越大,缓存命中率越高,就可以减少向上游权威DNS服务器发起递归查询的流量,最终让1.1.1.1公共DNS的解析速度再上一个台阶。

© 版权声明

相关文章