一致性hash算法
1.hash算法:
hash算法将任意长度的二进制值,转换为较小长度的二进制值,这个小的二进制值称为hash值,hash可以校验数据的完整性。
2.一致性hash算法
(2)一致性hash算法:一致性hash算法是一种分布式hash的算法,设计目标是为了解决因特网中的hotSpot问题。
(3)一致性hash算法的具体实现。
以memcache集群的路由为例
I. 一致性hash算法通过一个叫做一致性hash环的数据结构来实现 key到缓存服务器 的内存映射
II. 定义一个hash环,范围从0-2^32,把这个hash环想象成一个闭环,数字首尾想连
III. 把key通过一定的hash算法,得到hash,映射到环上
IV. 把机器通过一定的hash算法,映射到环上
V.如图,可以看出对象key的hash值和机器的hash值在同一空间中,然后对象按照顺时针转动,寻找最近的节点,存入key1、key2存到节点3中,key3、key4存入节点2,key5存入节点1
VI.当增加节点4的时候,只是节点3到节点4这一部分数据受到影响,不会像取余算法一样,影响70%的数据存储
3.余数hash
服务器有3台,那么被取余的数就是3.
(1)根据数据取余,然后路由到对应的缓存服务器,比如1结尾的,路由到server1
2结尾的,路由到server2 , 3结尾的路由到server3,
0,1,2,3,4,5,6,7,8,9,10
0,1,2,0,1,2,0,1,2,0,1
(2)如果新增一台服务器,被取余数就是4,
0,1,2,3,4,5,6,7,8,9,10
0,1,2,3,0,1,2,3,0,1,2
可以到到从数据2以后,70%的数会受到影响。