您好、欢迎来到现金彩票网!
当前位置:秒速时时彩开奖 > 算法分析 >

一致 Hash 算法分析

发布时间:2019-06-16 09:44 来源:未知 编辑:admin

  如何将数据均匀的分散到各个节点中,并且尽量的在加减节点时能使受影响的数据最少。

  随机放置就不说了,会带来很多问题。通常最容易想到的方案就是hash取模了。

  可以将传入的Key按照index = hash(key) % N这样来计算出需要存放的节点。其中hash函数是一个将字符串转换为正整数的哈希映射方法,N就是节点的数量。

  比如增加或删除了一个节点时,所有的Key都需要重新计算,显然这样成本较高,为此需要一个算法满足分布均匀同时也要有良好的容错性和拓展性。

  一致Hash算法是将所有的哈希值构成了一个环,其范围在0 ~ 2^32-1。如下图:

  之后将各个节点散列到这个环上,可以用节点的IP、hostname这样的唯一性字段作为Key进行hash(key),散列之后如下:

  之后需要将数据定位到对应的节点上,使用同样的hash函数将Key也映射到这个环上。

  这样按照顺时针方向就可以把k1定位到N1节点,k2定位到N3节点,k3定位到N2节点。

  依然根据顺时针方向,k2和k3保持不变,只有k1被重新映射到了N3。这样就很好的保证了容错性,当一个节点宕机时只会影响到少少部分的数据。

  在N2和N3之间新增了一个节点N4,这时会发现受印象的数据只有k3,其余数据也是保持不变,所以这样也很好的保证了拓展性。

  为了解决这个问题,一致哈希算法引入了虚拟节点。将每一个节点都进行多次hash,生成多个节点放置在环上称为虚拟节点:

  这样只需要在原有的基础上多一步由虚拟节点映射到实际节点的步骤即可让少量节点也能满足均匀性。返回搜狐,查看更多

http://homeschoolwwh.com/suanfafenxi/349.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有