2500 亿条缓存,硬生生挤出 100TB 内存:Cloudflare 这波 Rust 优化封神了
阅阅界编辑部2阅读2分钟
先上数字,感受一下什么叫大厂的基本功。Cloudflare 给 1.1.1.1 的 DNS 缓存做了五轮 Rust 内存优化:单条目内存占用降 56%,整个集群释放约 100TB 内存,插入吞吐涨 43%,查询延迟降 19%。背景是,Big Pineapple 里任何时刻都躺着超过 2500 亿条缓存。
第一轮最经典,也是你我能直接抄的:把插入后不再变的数据,从 Vec 和 String 换成 Box 和 Box。64 字节一条,集群直接省出 15TB 以上。教训:动态容器一时爽,定长数据全是税。
后面几轮越来越细:把应答、权限等记录合并成带紧凑偏移的列表,布尔值打包成位标志,跟查询域名相同的持有者名称直接省略、需要时从缓存键重建。最tricky的是 Rust 枚举——一开始他们给大变体加装箱,结果独立分配反而破坏局部性,得不偿失。小规模系统注意:这条在你们那可能反着来,装箱的间接访问损害大于收益,别无脑抄。
终版方案漂亮:直接用 DNS 线格式,把记录存在连续字节缓冲里。枚举没了,按记录分配没了,局部性拉满,常用记录还能直接拷贝进响应。这就是系统编程的浪漫:表示即性能。
给后端同学的作业:找你系统里最大的缓存,算算单条目多少字节,有多少是图方便交的税。2500 亿条才挤出 100TB,你的量级小,但比例可能更夸张。Unbound、PowerDNS 是另一套架构,感兴趣的可以对照着看原文。
来源|InfoQ《Cloudflare 将 1.1.1.1 DNS 缓存的内存占用削减 100TB》,https://www.infoq.cn/article/XWJ8G6GaFmNL74xpSgjU
评论(0)
暂无评论,来抢第一条。