密云区社区建设网站,二级建造师考试试题,网站建设虚线代码,做个网站软件多少钱是什么#xff1a; 一致性 hash#xff0c;是一种比较特殊的 hash 算法#xff0c;它的核心思想是解决在分布式环境下#xff0c; hash 表中可能存在的动态扩容和缩容的问题。 为什么会出现一致性Hash 一般情况下#xff0c;我们会使用 hash 表的方式以 key-value 的方式来…是什么 一致性 hash是一种比较特殊的 hash 算法它的核心思想是解决在分布式环境下 hash 表中可能存在的动态扩容和缩容的问题。 为什么会出现一致性Hash 一般情况下我们会使用 hash 表的方式以 key-value 的方式来存储数据但是当数据量比较大的时候我们就会把数据存储到多个节点上如图然后通过 hash 取模的方法来决定当前 key 存储到哪个节点上。 这种方式有一个非常明显的问题就是当存储节点增加或者减少的时候原本的映射关系就会发生变化。 也就是需要对所有数据按照新的节点数量重新映射一遍这个涉及到大量的数据迁移和重新映射迁移代价很大。 一致性Hash原理 而一致性 hash 就是用来优化这种动态变化场景的算法它的具体工作原理也很简单。 首先一致性 Hash 是通过一个 Hash 环的数据结构来实现的如图这个环的起点是 0终点是 2^32-1。 也就是这个环的数据分布范围是[0,2^32-1]。 如图然后我们把存储节点的 ip 地址作为 key 进行 hash 之后会在 Hash 环上确定 一个位置。 接下来如图就是把需要存储的目标 key 使用 hash 算法计算后得到一个 hash 值 同样也会落到 hash 环的某个位置上。 然后这个目标 key 会按照顺时针的方向找到离自己最近的一个节点进行数据存储。 为什么一致性Hash比普通hash算法好 假设现在需要新增一个节点如图node4那数据的映射关系的影响范围只限于node3 和 node1 只有少部分的数据需要重新映射迁移就行了。 如果是已经存在的节点 node1 因为故障下线了如图只那只需要把原本分配在 node1 上的数据重新分配到 node2 上就行了。 同样对数据影响的范围非常小。 所以一致性 hash 算法的好处是扩展性很强在增加或者减少服务器的时候数据迁移范围比较小。 另外在一致性 Hash 算范里面为了避免 hash 倾斜导致数据分配不均匀的情况我 们可以使用虚拟节点的方式来解决。