一致性hash算法

简介: 1.业务场景假设有30000张图片需要存放到编号为1、2、3的3台服务器上。

1.业务场景

假设有30000张图片需要存放到编号为1、2、3的3台服务器上。

2419fef994a947d3891b6811d41cb6c5.png

2.传统hash算法

假设有30000张图片需要存到3台服务器上,先给服务器编个号1、2、3,那么很显然使用设计一个碰撞小的hash函数,对每个图片的唯一标识(图片编号之类的)进行hash运算,然后将hash值%3=该图片应该存放的服务器编号。

当需要查找该图片的时候用key来重复以上过程就可以知道图片存放的位置在哪里。

传统hash算法的缺陷:

一旦新增一个服务器结点,会影响全局,需要全局重新进行hash运算。

2.一致性hash算法

2.1.算法过程

hash环:

假设有2的32次方个点,组成了一个虚拟的环,这个环称为hash环。之所以是2的32次方是因为32位(不用64位是为了向下兼容)的操作系统1个指针是4字节,1个字节是8位,也就是说1个指针能指向的内存地址有2的32次个。

一致性hash算法的过程:

整个过程开始前先对服务器进行散列,取服务器的唯一标识(一般就是用IP地址了)计算出服务器的hash值在hash环上对应的点。


然后进行图片的散列,取图片的唯一标识进行hash运算,然后将得到的hash值对2的32次方进行取模得到图片在hash环上的对应的点,如果这个点正好落在服务器上那就说明图片应该存在这台服务器上,如果没有则找到顺时针方向的第一台服务器,这台服务器就是图片应该存储的服务器。

f860bc6e96134fc087194f4b00a3c8e3.png

2.1.一直性hash算法的优点

如果新增一台服务器D,可以发现受影响的就只有一小部分,大部分的数据都不会受影响,

查找的时候都可以准确的找到。要重新做hash运算,重新进行散列的也只有受影响的那一小部分。

2.2.一致性hash算法的缺点

hash偏斜,即存在服务器结点能映射到它上面的hash值明显要多于其他结点,直白点说就是在hash环上管了更多的范围,存了更多的图片。上图三台服务器分布在hash环上的位置是均匀的,但是这种理想情况很少,现实中很可能都是分布不均匀的,比如按照下图,可以明显看到很大几率运算出来的图片存放位置会是A,这样也会造成存储的不均匀。

c1c8cf6b5f0a4333bd686eba2e25d3a4.png

2.3.hash倾斜的解决办法

解决hash倾斜的方法就是加服务器,很明显环上服务器结点越多被管的范围就切得越小,图片的存放越可能趋近于均匀。当然在实际中增加物理服务器结点的可能性是不大的,成本太高了,可以通过增加虚拟节点然后将虚拟节点映射到实际存在的物理节点即可。

6a0e85b0b6014ad09bdc3c9cd42522be.png


目录
相关文章
|
消息中间件 算法 分布式数据库
Raft算法:分布式一致性领域的璀璨明珠
【4月更文挑战第21天】Raft算法是分布式一致性领域的明星,通过领导者选举、日志复制和安全性解决一致性问题。它将复杂问题简化,角色包括领导者、跟随者和候选者。领导者负责日志复制,确保多数节点同步。实现细节涉及超时机制、日志压缩和网络分区处理。广泛应用于分布式数据库、存储系统和消息队列,如Etcd、TiKV。其简洁高效的特点使其在分布式系统中备受青睐。
|
算法 分布式数据库
Paxos算法:分布式一致性的基石
【4月更文挑战第21天】Paxos算法是分布式一致性基础,由Leslie Lamport提出,包含准备和提交阶段,保证安全性和活性。通过提案编号、接受者和学习者实现,广泛应用于分布式数据库、锁和配置管理。其简单、高效、容错性强,影响了后续如Raft等算法,是理解分布式系统一致性关键。
|
存储 缓存 负载均衡
一致性 Hash 算法 Hash 环发生偏移怎么解决
一致性 Hash 算法 Hash 环发生偏移怎么解决
256 1
|
4月前
|
消息中间件 存储 缓存
zk基础—1.一致性原理和算法
本文详细介绍了分布式系统的特点、理论及一致性算法。首先分析了分布式系统的五大特点:分布性、对等性、并发性、缺乏全局时钟和故障随时发生。接着探讨了分布式系统理论,包括CAP理论(一致性、可用性、分区容错性)和BASE理论(基本可用、软状态、最终一致性)。文中还深入讲解了两阶段提交(2PC)与三阶段提交(3PC)协议,以及Paxos算法的推导过程和核心思想,强调了其在ZooKeeper中的应用。最后简述了ZAB算法,指出其通过改编的两阶段提交协议确保节点间数据一致性,并在Leader故障时快速恢复服务。这些内容为理解分布式系统的设计与实现提供了全面的基础。
|
19天前
|
机器学习/深度学习 传感器 算法
基于不变扩展卡尔曼滤波器RI-EKF的同时定位与地图构建SLAM算法的收敛性和一致性特性研究(Matlab代码实现)
基于不变扩展卡尔曼滤波器RI-EKF的同时定位与地图构建SLAM算法的收敛性和一致性特性研究(Matlab代码实现)
|
3月前
|
存储 负载均衡 算法
我们来说一说 Java 的一致性 Hash 算法
我是小假 期待与你的下一次相遇 ~
118 1
|
存储 算法 NoSQL
(七)漫谈分布式之一致性算法下篇:一文从根上儿理解大名鼎鼎的Raft共识算法!
Raft通过一致性检查,能在一定程度上保证集群的一致性,但无法保证所有情况下的一致性,毕竟分布式系统各种故障层出不穷,如何在有可能发生各类故障的分布式系统保证集群一致性,这才是Raft等一致性算法要真正解决的问题。
290 11
|
存储 算法 索引
(六)漫谈分布式之一致性算法上篇:用二十六张图一探Raft共识算法奥妙之处!
现如今,大多数分布式存储系统都投向了Raft算法的怀抱,而本文就来聊聊大名鼎鼎的Raft算法/协议!
325 8
|
存储 算法 Java
(五)漫谈分布式之一致性算法篇:谁说Paxos晦涩难懂?你瞧这不一学就会!
没在时代发展的洪流中泯然于众的道理很简单,是因为它们并不仅是空中楼阁般的高大上理论,而是有着完整落地的思想,它们已然成为构建分布式系统不可或缺的底层基石,而本文则来好好聊聊分布式与一致性思想的落地者:Paxos与Raft协议(算法)。
272 6
|
缓存 负载均衡 算法
(四)网络编程之请求分发篇:负载均衡静态调度算法、平滑轮询加权、一致性哈希、最小活跃数算法实践!
先如今所有的技术栈中,只要一谈关于高可用、高并发处理相关的实现,必然会牵扯到集群这个话题,也就是部署多台服务器共同对外提供服务,从而做到提升系统吞吐量,优化系统的整体性能以及稳定性等目的。
317 2

热门文章

最新文章