一致性Hash算法原理(通俗易懂)

一致性Hash算法应用场景
请求的负载均衡:比如Nginx的ip_hash策略,通过对IP的Hash值来额定将请求转发到哪台Tomcat
分布式存储:比如分布式集群架构Redis、Hadoop、ElasticSearch、Mysql分库分表,数据存入哪台服务器,就可以通过Hash算法来确定
普通Hash算法存在的问题
如果服务器减少或者增多,所有客户端都需要进行重新Hash,然后进行分配。
一致性Hash算法
一致性Hash算法原理(通俗易懂)
一条直线上有0到2^32-1,这些正整数。然后我们将其头尾相接,变成一个圆环形成闭环(Hash环)
一致性Hash算法原理(通俗易懂)
我们以Nginx的ip_hash分发请求为例说明一致性Hash算法:
对服务器的IP进行hash算法,获取Hash值,然后放到Hash闭环对应位置上;
通过对客户端的IP进行Hash算法获取Hash值,然后顺时针查找距离该Hash最近的服务器,并将请求转发到该服务器。
这样的话服务器进行扩展或者缩减后,比如缩减了一台服务器3,那么服务器3和服务器2之间的请求会被转发到服务器4上,而其他的请求不会受到影响,这就是一致性Hash的好处,将影响程度减小。
PS:这种方式有一个问题
假如就两台服务器,通过Hash算法后位置如下:
一致性Hash算法原理(通俗易懂)
服务器1-服务器2之间的客户端请求都转发到了服务器2上,然而其他大量请求都转发到了服务器1上,这就导致服务器1压力过大,这种问题叫做数据倾斜问题。
数据倾斜问题解决
一致性Hash算法引入了虚拟节点机制
具体做法是在服务器IP或者主机名后面增加编号来实现。比如可以为每台服务器计算是哪个虚拟节点,于是可以分别计算“服务器1IP#1,服务器2IP#2,服务器1IP#3,服务器2IP#1,服务器2IP#2,服务器2IP#3”的哈希值,于是形成了6个虚拟节点,如下图
一致性Hash算法原理(通俗易懂)
这样的话客户端经过Hash算法后就会被更加均匀的分布在Hash闭环上,请求也会被更加均匀的分发在各个服务器上,从而解决了数据倾斜问题
 
 

一致性Hash算法原理(通俗易懂)

上一篇:CSS 中文字体对应英文和Unicode编码


下一篇:openssh for windows安装