首页 > 编程语言 >分布式系统中的智能缓存:有界一致性哈希算法详解

分布式系统中的智能缓存:有界一致性哈希算法详解

时间:2024-05-28 12:58:13浏览次数:23  
标签:负载 缓存 key 算法 哈希 分布式系统 一致性 节点

普通 hash 算法

​ 在分布式系统中,普通哈希算法通常用于确定数据存储在哪个节点上。例如,如果我们有3个节点,我们可以通过计算hash(key) % 3来确定一个给定的key应该存储在哪个节点上。然而,这种方法存在一个显著的问题:当节点数量发生变化(增加或减少)时,会导致大量的缓存数据失效,因为大多数key的哈希值将会映射到不同的节点上。

一致性 Hash 算法

​ 一致性哈希算法被设计用来减少由于节点增减而导致的缓存失效问题。该算法通过将所有的节点和key都映射到一个哈希环上,使得每个key总是被分配给顺时针方向的第一个节点。这样,当节点数量变化时,只有少数key会受到影响,从而减少了缓存失效的范围。

​ 然而,一致性哈希算法仍然面临一些挑战,例如,当某些key成为热点时,对应的节点可能会承受过高的负载。为了解决这个问题,有界一致性哈希算法被提了出来。

有界一致性 Hash 算法

​ 有界一致性哈希算法基于 Google 论文《有界一致性哈希算法》(Consistent Hashing with Bounded Loads),可以用于解决一致性哈希环上的缓存热点问题。

算法原理

​ 有界一致性哈希算法的核心思想是在一致性哈希的基础上,根据节点的当前负载情况,为每个节点设置一个最大负载限制。当在一致性哈希环上查找节点时,如果一个节点已经达到了其最大负载限制,则会跳过该节点,继续查找下一个节点。这样可以有效地分散热点key的负载,避免单个节点过载。

  • R: 当前所有节点的总负载(正在处理的总请求数)
  • T: 节点总个数
  • L: 当前所有节点的平均负载
  • L = R/T
  • ε: 一个参数用于表示在平均负载的基础上能够承受的额外负载上限,可以按照实际需求进行设置
  • M: 节点的最大负载上限
  • M = L*(1+ε) = R*(1+ε)/T
  • 一致性哈希中进行节点查找时,增加检查匹配的节点的负载(正在处理的请求数)是否达到负载上限 M 的操作,如果达到了上限则跳过当前节点继续往后查找。

​ 有界一致性哈希算法结合了最少连接策略和一致性哈希策略的优点,既平衡了负载又保持了一致性哈希的优势。通过调整ε的值,可以灵活地在最少请求策略和传统一致性哈希策略之间转换

  • ε 的值是 0 的时候,就实现了最少连接策略的效果
  • ε 的值是无穷大的时候,就是传统的一致性哈希策略
加权有界一致性 Hash 实现

​ 在实际应用中,不同的节点可能具有不同的处理能力,因此需要支持节点权重。加权有界一致性哈希算法通过以下方式实现:

  • R: 当前所有节点的总负载(正在处理的总请求数)
  • T: 所有节点的权重总和
  • L: 当前所有节点的平均负载(基于权重的平均负载)
  • L = R/T
  • W: 当前节点的权重值
  • ε: 一个参数用于表示在平均负载的基础上能够承受的额外负载上限。
  • M: 节点的最大负载上限
  • M = W*L*(1+ε) = W*R*(1+ε)/T

​ 在进行节点查找时,如果一个节点的负载达到了其最大负载上限M,则会跳过该节点,继续查找下一个节点。

Reference
  1. https://arxiv.org/pdf/1608.01350
  2. https://medium.com/vimeo-engineering-blog/improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed
  3. https://mozillazg.com/2019/02/load-balancing-strategy-algorithm-weighted-least-connection.html
  4. https://mozillazg.com/2019/04/load-balancing-strategy-algorithm-Consistent-Hashing-with-Bounded-Loads.html

标签:负载,缓存,key,算法,哈希,分布式系统,一致性,节点
From: https://blog.csdn.net/u013911096/article/details/139203113

相关文章

  • 【秒杀系统】秒杀系统实战(四):缓存与数据库双写一致性深度分析
    【秒杀系统】秒杀系统实战(四):缓存与数据库双写一致性深度分析前言微笑挖坑,努力填坑。————已经拥有黑眼圈,但还没学会小猪老师时间管理学的蛮三刀同学本文是秒杀系统的第四篇,我们来讨论秒杀系统中缓存热点数据的问题,进一步延伸到数据库和缓存的双写一致性问题,并且给......
  • 算法课程笔记——KMP&字符串哈希
    算法课程笔记——KMP&字符串哈希就是模板题aba是前后缀,真前后缀就只有a/b /a避免出现不同字符有相同的值相当于进制如果你能熟练掌握正则表达式,用库还能更快......
  • .哈希表.
    哈希哈希表:将大而复杂的数据映射到紧凑的区间内。分为:①存储结构 (离散化是特殊的哈希,之前讲的离散化是严格保序的映射到区间上是连续递增的)哈希不保序,这里讲的是一般的哈希弊端:若数据的数值较大可以对其取模后再映射,但是取模后可能造成:之前不相同的数值取模后映射到同......
  • 数据结构与算法学习(07)查找(4)散列、哈希、字典——BUAA
    文章目录查找(4)——散列(Hash)字典介绍散列函数的构造方法直接地址法数字分析法平方取中法叠加法移位叠加法折叠叠加法基数转换法除留余数法随机数法一些好的哈希函数**针对字符串好的哈希函数冲突的处理方法开放地址法线性探测二次探测伪随机特点再散列法链接地址法代......
  • 散列(哈希)及其练习题(基础)
    散列导入:有N个数和M个数,如何判断M个数中每个数是否在N中出现?思想:空间换时间创建hashtable,以N个数本身为索引(数组下标)构建boolhashtable输入x的过程中,hashtable[x]=True(若要计算出现次数,换成++)但终归是有局限性!数字只能是整数,还不能太大,等等。散列函数:平房区中法、取余......
  • 系统卡顿?Mac怎么清理缓存?轻松解决!
    我们日常使用Mac电脑的过程中,时常会遇到系统运行缓慢或卡顿的情况,这不仅影响工作效率,也大大降低了使用体验。那么,Mac运行缓慢的原因究竟是什么呢?事实上,原因有很多,包括硬盘空间不足、系统资源占用过高、启动项目过多等。其中,缓存文件积累过多是一个常被忽视,但实际上对系统性能影......
  • dp商品缓存
    缓存更新策略缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适。内存淘汰:redis自动进行,当redis内存达到咱们设定的max-memery的时......
  • redis自学(44)多级缓存
              就是把注释全都删了  这里指的是OpenResty的Nginx配置文件   请求参数处理    先修改Nginx配置文件 修改lua文件,然后重启nginx   查询Tomcat   写lua文件做工具类      ......
  • windows如何获取文件的哈希值
    在Windows系统中,可以使用以下几种方法来获取文件的哈希值:使用PowerShell在PowerShell中运行以下命令即可计算文件的SHA256哈希值:Get-FileHash-Path<文件路径>-AlgorithmSHA256其中<文件路径>是待计算哈希值的文件的完整路径。使用certutil命令Window......
  • 分布式系统
    什么是分布式?分布式系统一定是由多个节点组成的系统。其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。分布式与集群的区别?集群:集群是指在几个服务器上部署相同的应用程序来分担客户端的请求。它是同一个系统部署在不同的服务器上,比如一个登陆系统部署......