案例库 · 软件与 IT · 技术决策 · 2016
Maglev凭借每包一张查找表平衡了谷歌的流量
谷歌的Maglev将一致性哈希转化为紧凑的表,实现O(1)查找和接近最小的干扰。
解法
谷歌的云需要软件负载均衡器,能够将数据包分发到众多后端,并在后端变化时保持连接不中断。经典的一致性哈希配合虚拟节点解决了干扰问题,但以内存中的大型查找表为代价。
在NSDI 2016上发表的Maglev论文采用了不同的方案:一张紧凑的查找表,每个后端对应一个条目,由每个后端的随机排列填充。一个连接的数据包只哈希一次,并读取一个表项。
这种构造保证了近乎相等的负载,在后端添加或移除时干扰最小,并且在查找时没有协议或内存开销。每次成员变化时,表从头重建,行为确定。
生效的原因
- 每个数据包只需一次哈希和一次表读取
- 表重建集中在变化时进行
- 每个后端的排列带来接近相等的负载
- 后端变化时,大约1/N的连接会移动
取得的成效预计算映射;查找只需一次读取利落
可借鉴之处
如果某个结构在每次查找时代价过高,在世界变化时预计算映射:重建的表提供O(1)查找和有限的干扰,用设置时间换取每个数据包的节省。
后续进展
Maglev在谷歌云中承载了生产流量,其NSDI论文成为负载均衡器设计的参考;类似的基于表的哈希思想扩散到了开源负载均衡项目中。
资料来源
- Maglev: A Fast and Reliable Software Network Load Balancer
- Maglev: A Fast and Reliable Software Network Load Balancer (session page)
发现哪里写错了?告诉我们。