首页 > 其他分享 >一致性 Hash

一致性 Hash

时间:2023-08-21 11:36:06浏览次数:41  
标签:缓存 hash 环上 服务器 一致性 Hash 节点

参考: simplezero  :一致性hash  

概念

一致性hash算法主要应用在分布式缓存系统中,在增加或者删除服务器节点时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系,也就是系统中的大多数历史缓存的存储服务器节点可以不变,解决了普通hash算法带来的动态伸缩性问题。

 

  • 如上图,一致性hash定义了一个 0 ~ 2^32-1 hash环
  • hash函数对数据并不是按照服务器节点的数量取模,而是按照 2^32 取模(hashcode % 2^32),这样请求的数据就会落在环上某个固定的位置
  • 服务器节点按照IP或域名进行hash,分配到hash环上,如图分配了4个服务器节点,分别在hash环的 10000、20000、30000、40000 位置(为了方便演示)
  • 请求数据先通过hash函数(hashcode % 2^32)确定了在环上的位置,再沿着环顺时针查找,遇到的第一个节点就是命中的服务器节点。

 

  • 新增节点E (25000),按照一致性hash算法,只有B ~ E 之间的历史数据会受到影响,(之前是路由到C的,现在路由到 E ),即只有C的一部分数据需要迁移到E。
  • 删除节点B,那么 A~ B 之间的历史数据丢失,并且新增数据会被插入到 C,其他的节点都不会受到影响。
  • 可以看到一致性hash算法,节点的增删都只会影响了系统中的一小部分数据,容错性非常好。

问题

如果每个服务器在环上只有一个节点,那么当服务器宕机,它原本所负责的缓存数据将全部交由顺时针方向的下一个服务器节点处理。例如,当 B 退出时,它原本所负责的缓存将全部交给 C 处理。这就意味着 C 的访问压力会瞬间增大。设想一下,如果 C 因为压力过大而崩溃,那么更大的压力又会向 D 压过去,最终服务压力就像滚雪球一样越滚越大,最终导致缓存雪崩

一致性hash 通过引入虚拟节点解决了这个问题,每个实际节点映射多个虚拟节点,数据按照规则找到虚拟节点后,再储存到映射的实际节点上;因为虚拟节点可以在hash环上均匀分布,这意味着当一个真实节点失效退出后,它原来所承载的压力将会均匀地分散到其他节点上去,解决缓存雪崩问题。

 

标签:缓存,hash,环上,服务器,一致性,Hash,节点
From: https://www.cnblogs.com/suBlog/p/17645550.html

相关文章

  • 加速比计算+一致性新的O状态+block大小对cache的影响+BBM和写时复制+伪汇编和嵌入+汉
    加速比计算100个处理器对于程序的并发而言,是100倍的加速。对于程序的顺序执行而言,是1倍的速度。对于该题目,首先明确90倍的加速意味着什么:原始程序量为1,原始执行时间为1,现在加速了90倍,而程序本身不变,则:原始的程序量为1,现在的执行时间是1/90。现在假设x为并行执行的比例,则程序......
  • burpsuite靶场----XSS----DOM型XSS4----hashchange
    burpsuite靶场----XSS----DOM型XSS4----hashchange靶场地址https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-jquery-selector-hash-change-eventXSS字典链接:https://pan.baidu.com/s/1XAJbEc4o824zAAmvV85TOA提取码:1234正式开始1.查看html源码,......
  • php的password_verify 和 password_hash密码验证
    password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)。当前支持的算法:PASSWORD_DEFAULT -使用bcrypt算法(PHP5.5.0默认)。注意,该常量会随着PHP加入更新更高强度的算法而改变。所以,使用此常量生成结果的长度将在未来有变化。因此,数据库里储存结果的列可......
  • Redis扩容与一致性Hash算法解析
    推荐阅读AI文本OCR识别最佳实践AIGamma一键生成PPT工具直达链接玩转cloudStudio在线编码神器玩转GPUAI绘画、AI讲话、翻译,GPU点亮AI想象空间资源分享「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间https://drive.uc.cn/s/2aeb6c2dcedd4AIGC资料......
  • 【问题】分布式事务的场景下如何保证读写分离的数据一致性
    我的理解这个题目可以获得以下关键字:分布式处理、读写分离、数据一致性。那么就从”读写分离“做切入口吧,按我的理解其实就是在保证数据一致性的前提下两个(或以上)的数据库分别肩负不同的数据处理任务。太过久远的就不说了,最近几年其实都用的MySQL比较多。那么就基于MySQL我用......
  • redis:Hash
    Hash字典数据,和python中的dict一个数据样式:虽然写法是这样,但是在存储上,并不是把{}当做一个整体,而是hash内部的每个K-V都单独存储,这时候称为F-V对更合适,因为一个K真正对应的是{...}。 常用命令在Hash中,K为{...}的Key,V是{...}的整体,{...}中的键值对写为FIELD-VALUE命令......
  • ConcurrentHashMap 源码详解
    ConcurrentHashMap是Java提供的一个并发散列映射实现,它允许多个线程同时读写而不需要同步整个数据结构。它是线程安全的,并且相比于其他线程安全的Map实现(如Collections.synchronizedMap或Hashtable),它提供了更高的并发性能。以下是ConcurrentHashMap的一些核心特性和相应......
  • HashMap常见面试题
    HashMap的底层数据结构?JDK1.8之前HashMap底层是数组和链表结合在一起使用。HashMap通过key的hashCode经过扰动函数处理过后得到hash值,然后通过(n-1)&hash判断当前元素存放的位置(这里的n指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的......
  • HashMap常见面试题
    HashMap的底层数据结构?JDK1.8之前HashMap底层是数组和链表结合在一起使用。HashMap通过key的hashCode经过扰动函数处理过后得到hash值,然后通过(n-1)&hash判断当前元素存放的位置(这里的n指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素......
  • 构造一致性哈希算法
    先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0,232-1])将服务器节点放置在这个Hash环上,然后根据数据的key值计算得到其Hash值(其分布也为[0,2^32-1]),接着在Hash环上顺时针查找距离这个key值的Hash值最近的服务器节点,完成key到服务器的映射查找......