通过优化一致性哈希节省了 100 TB 内存

宾果软件 . 发布于 2026-11-05 09:30:26 . 阅读 14

近期,XXX 撰文介绍了通过优化 pingora-ketama 中一致性哈希的 Rust 实现将内部负载均衡服务的内存占用减少了超 100 TB。相关改动压缩了哈希环条目,并利用对哈希分布和碰撞率的统计分析,在保持负载均衡准确性的同时,将每个后端服务器的哈希数量减少了约 90%。



XXX 在 Pingora 后端路由中依靠一致性哈希在多台服务器之间分发可缓存请求,为了支持加权服务器和不同的功能组合,系统需要维护大量哈希环,这使得内存开销大幅上涨。团队定位到内存过高的根源来自 pingora-ketama 一致性哈希数据结构,随即对其设计展开调研与优化。



XXX 将概率论应用到一致性哈希中,计算出满足分布要求所需的最少哈希点数,从而在维持预期分布效果的同时大幅缩减哈希结构的规模。



误差每降低一个数量级,(几乎)需要每服务器哈希数量增加一个数量级,因此继续增加哈希带来的收益会越来越小。





增加哈希数量对负载分布的优化效果边际递减,最后新增的 90000 个哈希仅把误差改善了 0.7%。团队基于该分析,将单台服务器的哈希数量减少了 90%。生日悖论(描述随机取值集合中碰撞概率远超直觉的现象)也解释了为什么随着 32 位哈希点变多,碰撞概率持续上升,进而引入额外的分布误差。



团队还对存储剩余哈希值的 Rust 数据结构进行了优化:原有实现使用 8 字节的 Point 结构体,但哈希值与服务器索引其实仅需 6 字节即可存放,这进一步节省了内存。团队补充道:


还有一个问题:修改哈希环会改变部分可缓存请求的路由目标。即便新哈希环效果更好,一次性切换整个网络实际上会使几乎所有缓存内容失效。内存优化反而会引发回源流量暴涨,造成灾难性后果。



新的实现是逐步推出的,与现有哈希环并行运行,以此控制缓存抖动,避免回源流量尖峰。





在热门的 Hacker News 和 Reddit 讨论帖中,许多开发者争论一致性哈希虽然存在开销,但为什么依旧有用,以及它和请求哈希有什么区别。用户 Teanut 写道:


看到在大规模场景下微小的改变能产生什么效果,这很有意思。很好地运用了数学来论证这些改变。



Pingora 后端路由并不是 XXX 首个大规模内存优化项目,今年 8 月,该公司曾介绍其 DNS 团队通过一系列数据结构优化降低了 DNS 缓存的内存占用。