EN
返回档案库

案例库 · 软件与 IT · 技术决策 · 2016

Maglev凭借每包一张查找表平衡了谷歌的流量

谷歌的Maglev将一致性哈希转化为紧凑的表,实现O(1)查找和接近最小的干扰。

Google

解法

谷歌的云需要软件负载均衡器,能够将数据包分发到众多后端,并在后端变化时保持连接不中断。经典的一致性哈希配合虚拟节点解决了干扰问题,但以内存中的大型查找表为代价。

在NSDI 2016上发表的Maglev论文采用了不同的方案:一张紧凑的查找表,每个后端对应一个条目,由每个后端的随机排列填充。一个连接的数据包只哈希一次,并读取一个表项。

这种构造保证了近乎相等的负载,在后端添加或移除时干扰最小,并且在查找时没有协议或内存开销。每次成员变化时,表从头重建,行为确定。

生效的原因

  • 每个数据包只需一次哈希和一次表读取
  • 表重建集中在变化时进行
  • 每个后端的排列带来接近相等的负载
  • 后端变化时,大约1/N的连接会移动
取得的成效预计算映射;查找只需一次读取利落

可借鉴之处

如果某个结构在每次查找时代价过高,在世界变化时预计算映射:重建的表提供O(1)查找和有限的干扰,用设置时间换取每个数据包的节省。

后续进展

Maglev在谷歌云中承载了生产流量,其NSDI论文成为负载均衡器设计的参考;类似的基于表的哈希思想扩散到了开源负载均衡项目中。

资料来源

发现哪里写错了?告诉我们。

相关案例