一致性hash

介绍

  在分布式系统中,通常不同的机器存储着不同的数据,例如redis集群中存储的数据。
  这些数据通常采用hash算法来计算出应该存储在那台机器上。但是,当集群中的节点增加或者减少时,通过原有的hash算法计算出来的位置将会完全错误。
  一致性hash就是为了解决这种问题诞生的。


内容

  在redis集群中,我们通常采用一致性hash算法计算数据具体分布在那一台机器上。
  普通的hash算法通常采用取模的方式计算出hash结果,而当机器的数量发生变化,也就是除数发生变化时,取到的模也会发生变化,这时根据模数来定位数据存储的位置就会发生错误。
  一致性hash算法也是采用取模的原理,来计算数据存储的位置。但与普通hash算法不同的是,一直性hash算法计算出来的并不是直接的位置,而是需要根据hash环查询地址。
 与普通hash算法不同的是,普通hash算法是对机器的数量取模,而一致性hash是对2^32取模。

hash环

  在一致性hash中,构造出一个hash环(周长数量为2^32)来标记数据位置。
  由于一致性hash算法采用2^32取模,所有的取模结果都将落在构造出来的hash环上。
  将所有机器分布在hash环上,机器左边的数据将存储在该机器中,而右边的数据将存储在下一台机器上。因为是环状结构,这样所有的数据都保证了有机器存储。而且,因为是环,所以当环上增加机器节点时,只有该机器节点左边的一小部分数据会发生重新分配机器。

问题