ConsistenthashingConsistenthashing是一种哈希算法,即在删除或添加节点时,尽可能少地改变现有键的映射关系,尽可能少地改变现有映射关系,一般按顺时针方向操作.在回答之前,大家可以想想真实情况下如何处理consistenthashing。将整个散列值空间组织成一个虚拟环。假设哈希函数的取值空间为0~2^32-1,整个哈希空间环如下左图所示。一致性哈希的基本思想是使用相同的哈希算法将数据和节点映射到图中的环形哈希空间中。右上图为四个数据object1-object4节点的分布图和数据在环上的映射如果有一批服务器,可以按照IP或者主机名为key进行哈希,映射到哈希根据结果??响铃。三台服务器分别是nodeA-nodeC现在有一批数据object1-object4需要存放在服务器上,那么可以用同样的hash算法对数据进行hash,结果也要上环,就可以了顺时针搜索找到一个节点(服务器)把数据存放在这个节点上,这样数据和节点是一一对应的关系,如下图:如果一个服务器有问题,比如nodeB上图中,会受到影响的最重要的是它的逆时针方向和下一个节点之间的数据。你只需要将这些数据按顺时针方向映射到它的第一个节点。如果在左图1566573901641中添加一个新的服务器,添加一个节点nodeD,它的逆时针方向到下一个节点之间的数据是受影响的,这些数据可以映射到nodeD,假设只有2台服务器用于右上图中的虚拟节点:nodeA和nodeC,nodeA映射1条数据,nodeC映射3条数据,所以数据分布不均衡。引入虚拟节点,假设复制的节点数为2,则nodeA变为:nodeA1和nodeA2,nodeC变为:nodeC1和nodeC2,映射变为如下:平衡性大大提高bigimprovement
