美文网首页
程序员之一致性Hash

程序员之一致性Hash

作者: zhglance | 来源:发表于2020-02-10 21:50 被阅读0次

1.一致性Hash解决的问题

针对分布式系统中负载均衡的问题,一般使用Hash算法让固定参数(如根据userId)的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分的请求,起到负载均衡的作用。

当机器增加或减少时,使用普通的Hash算法实现的负载均衡(特别是缓存服务器),会导致几乎所有的请求到的机器发生改变。

如当前服务有2台机器:

原来userId=10 mod 2,请求到机器0;
原来userId=21 mod 2,请求到机器1。

当增加了机器2之后:

userId=10 mod 3,请求到机器1;
userId=21 mod 3,请求到机器0。

如果是缓存服务器,几乎会导致所有的缓存失效;
如果是session服务器,几乎会导致所有的session失效;

给服务带来不必要的性能损失,而且有可能导致服务不可用。

因此,当增加或者删除机器时,尽量保证原来分配到的某个机器,现在仍然应该分配到那个机器,即将数据迁移量降到最低。

1.一致性Hash原理

一致性Hash是取模232,构造一个[0,231-1]的整数Hash环,将机器放到对应的Hash环节点上。当由请求时,根据key值(如userId)计算得到Hash值,然后在Hash环上顺时针查找距离这个key的Hash值最近的服务器节点,完成key到服务器的Hash映射过程。

可能导致的问题:
1.数据倾斜问题,特别是机器数量比较少时(通过虚拟节点解决);
1.分布不均匀导致的请求热点问题。

相关文章

网友评论

      本文标题:程序员之一致性Hash

      本文链接:https://www.haomeiwen.com/subject/vdvzxhtx.html