架构师训练营第一期 - 第五周课后作业
一致性 hash 算法:先构造一个长为 2^32 的整数环,时钟 12 点位置为 0,按顺时针方向递增,临近 12 点的左侧位置为 2^32-1,根据节点的 Hash 值将 Node(服务器)分配到环的对应位置上,然后计算需要查询数据的键值 KEY 的哈希值,然后在哈希环上顺时针查询离这个 KEY 最近的服务器节点,完成映射。服务器删除节点或者有节点宕机时,比如要删除节点 Node3,只会影响该节点与上一个节点(Node2)之间的对象,这部分对象将被调整映射到下一个节点 Node4,而其他对象的映射关系都无需调整。服务器增加节点时,比如要在 Node2 和 Node3 之间增加节点 NodeN,只会影响新增节点(NodeN)与上一个节点(Node2)之间的对象,这部分对象调整映射到新增节点 NodeN,其他对象的映射关系都无需调整。一致性哈希算法在服务节点太少时,容易因为节点分部不均匀而造成数据倾斜问题。解决这个问题的办法是使用虚拟节点,将一个服务器节点虚拟成若干个虚拟节点,将虚拟节点放到环上。
评论