【分布式】一致性哈希

来源:互联网 发布:参与网络棋牌赌博 编辑:程序博客网 时间:2024/06/05 05:12

一致性哈希是分布式存储中需要用的技术,更具体一般是分布式缓存。

分布式环境下存储数据,一般是切片方式,会有多个机器存数据,拿到一个数据以后,会根据数据的某一个字段做路由,定位到具体的一台机器,进行存取。总之会有一个算法根据关键字定位到一个机器,这个算法会与机器的数目有关。比如key%n或者key&&(n-1)等。

如果机器数目不变,上面的算法没有任何问题。

但是一旦机器数目变了,比如增加了或者宕机了,那么算法中的n就需要变化,这时,路由就会出问题,以前存的值无法读取到,如果是分布式缓存,那么会造成缓存雪崩,之前的缓存基本全部失效。一致性哈希就是解决这个问题的。

一致性哈希假设哈希空间是一个环,环的代销一般很大,是固定的,一般是2^32。

然后先把机器映射到环上,可以根据ip地址或者其他。然后具体存储时,拿到一个key,把key定位到环空间的一个点上,该key对应的机器应该是这个点顺时针开始遇到的第一个服务器。

如果一台机器宕机,那么大部分的数据不受影响,只有宕机服务器和该服务器的上一个服务器之间的数据回收影响,也就是缓存失效。

同理,如果增加一台机器,也是新家机器和上一个机器之间的数据会失效,但是其余的都不受影响。

除此之外,一致性哈希算法还可以处理节点分布不均匀问题。

我们可以新增加一些虚拟节点,然后虚拟节点可以人为配置到物理节点上,这样就避免了只使用少量物理节点时分布不均匀的问题。

最后上一篇有图的不错的博客:

http://www.cnblogs.com/lpfuture/p/5796398.html