算法之什么是一致性哈希?

开发 前端 算法
一致性哈希是一种哈希算法,就是在移除或者增加一个结点时,能够尽可能小的改变已存在key的映射关系尽可能少的改变已有的映射关系,一般是沿着顺时针进行操作

[[413431]]

一致性哈希

一致性哈希是一种哈希算法,就是在移除或者增加一个结点时,能够尽可能小的改变已存在key的映射关系尽可能少的改变已有的映射关系,一般是沿着顺时针进行操作,回答之前可以先想想,真实情况如何处理一致性哈希将整个哈希值空间组织成一个虚拟的圆环,假设哈希函数的值空间为0~2^32-1,整个哈希空间环如下左图所示

什么是一致性哈希?

一致性hash的基本思想就是使用相同的hash算法将数据和结点都映射到图中的环形哈希空间中,上右图显示了4个数据object1-object4在环上的分布图

结点和数据映射

假如有一批服务器,可以根据IP或者主机名作为关键字进行哈希,根据结果映射到哈希环中,3台服务器分别是nodeA-nodeC

现在有一批的数据object1-object4需要存在服务器上,则可以使用相同的哈希算法对数据进行哈希,其结果必然也在环上,可以沿着顺时针方向寻找,找到一个结点(服务器)则将数据存在这个结点上,这样数据和结点就产生了一对一的关联,如下图所示:

什么是一致性哈希?

移除结点

如果一台服务器出现问题,如上图中的nodeB,则受影响的是其逆时针方向至下一个结点之间的数据,只需将这些数据映射到它顺时针方向的第一个结点上即可,下左图

什么是一致性哈希?

1566573901641

添加结点

如果新增一台服务器nodeD,受影响的是其逆时针方向至下一个结点之间的数据,将这些数据映射到nodeD上即可,见上右图

虚拟结点

假设仅有2台服务器:nodeA和nodeC,nodeA映射了1条数据,nodeC映射了3条,这样数据分布是不平衡的。引入虚拟结点,假设结点复制个数为2,则nodeA变成:nodeA1和nodeA2,nodeC变成:nodeC1和nodeC2,映射情况变成如下:

什么是一致性哈希?

这样数据分布就均衡多了,平衡性有了很大的提高

 

责任编辑:姜华 来源: 今日头条
相关推荐

2020-07-20 08:30:37

算法哈希分布式系统

2019-11-01 09:13:37

算法哈希缓存

2021-02-05 08:00:48

哈希算法​机器

2016-12-19 18:41:09

哈希算法Java数据

2021-02-02 12:40:50

哈希算法数据

2023-12-12 08:00:50

节点哈希算法

2018-07-05 09:41:08

一致性哈希算法

2023-12-20 08:11:02

Redis节点通信

2021-09-15 07:46:42

哈希一致性哈希算法

2023-06-25 09:44:00

一致性哈希数据库

2023-06-26 07:17:48

负载均衡策略Dubbo

2021-05-19 21:50:46

Hash算法测试

2022-03-22 09:54:22

Hash算法

2017-07-25 14:38:56

数据库一致性非锁定读一致性锁定读

2023-12-05 14:44:01

2021-11-12 08:38:26

一致性哈希算法数据结构

2022-01-27 08:31:20

一致性哈希

2020-03-16 11:55:28

PaxosRaft协议

2019-10-11 23:27:19

分布式一致性算法开发

2022-11-10 07:49:09

hash算法代码
点赞
收藏

51CTO技术栈公众号