找回密码
 立即注册
搜索
查看: 80|回复: 6

省下 100TB 内存:Cloudflare 如何给 1.1.1.1 的 DNS 缓存做减法

[复制链接]

主题

0

回帖

0

积分

积分
0
发表于 2026-9-1 11:00:10 | 显示全部楼层 |阅读模式
省下 100TB 内存,靠的不是换更贵的硬件,而是删掉几个字段。

Cloudflare 在官方博客里公布了对 1.1.1.1 DNS 缓存的数据结构优化,净迁移后省下了约 100TB 的内存。这是目前全球最大的公共 DNS 解析器之一,缓存条目以亿计,任何微小的每条目开销都会被规模放大。




第一个改动是最典型的 Rust 陷阱:把 Vec<T> 换成 Box<&#91;T&#93;>。Vec 需要维护一个 capacity 字段,在只读缓存这种永远不会再增长扩容的场景里,这个 8 字节的容量字段完全派不上用场,却为每个条目白白付出。Box<&#91;T&#93;> 丢弃了 capacity 的语义,正好匹配"存进去之后只读"的用法。

第二个改动砍掉了重复序列化。缓存会存储已经序列化好的 DNS 记录,避免每次查询都重新做一遍序列化与反序列化——这部分 CPU 开销在原来也一直被重复支付。

第三个是去重。DNS 查询名里的 owner 信息在不同记录之间大量重复,把它们抽出来共用,而不是每个记录各存一份。

三处改动单看都不起眼,加起来在数亿级条目上就变成了 100TB 这个数字。

不过有用户尖锐地指出,当初设计的时候难道没有 code review 发现 Vec 的 capacity 在只读场景是浪费的吗?这引出了一场关于"过早优化"和"合理设计"边界的老话题。也有人给出了一个更冷静的顺序判断:先做出能跑的产品、验证想法、稳定业务、开始盈利,之后才轮到优化成本——"优化其实是整个过程里最简单的部分。"

参考来源:

https://blog.cloudflare.com/dns-cache-memory-optimization-1111/
https://news.ycombinator.com/item?id=49468083

原文链接

打赏作者

当前余额:0 Token,打赏后立即到账

主题

0

回帖

0

积分

积分
0
发表于 2026-9-1 11:15:01 | 显示全部楼层
这是目前全球最大的公共 DNS 解析器之一,缓存条目以亿计,任何微小的每条目开销都会被规模放大。
这句信息量很大,值得单独展开讲讲。

2

主题

5

回帖

0

积分

积分
0
发表于 2026-9-1 11:45:01 | 显示全部楼层
支持原创,内容很扎实,持续关注。

主题

0

回帖

0

积分

积分
0
发表于 2026-9-1 12:45:01 | 显示全部楼层
好文,Cloudflare的趋势基本被楼主说中了。

主题

0

回帖

0

积分

积分
0
发表于 2026-9-1 13:45:01 | 显示全部楼层
前排学习,感谢楼主整理Cloudflare相关的内容。

主题

0

回帖

0

积分

积分
0
发表于 2026-9-1 15:15:01 | 显示全部楼层
潜水很久了,DNS这个话题必须冒个泡。

主题

0

回帖

0

积分

积分
0
发表于 2026-9-1 16:45:01 | 显示全部楼层
100TB和DNS结合起来讲的思路很好,这种对比很少见。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

{ template common/footer}