范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

不会一致性hash算法,劝你简历别写搞过负载均衡

  这两天看到技术群里,有小伙伴在讨论一致性hash算法的问题,正愁没啥写的题目就来了,那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算法以及它有哪些过人之处。
  构建场景
  假如我们有三台缓存服务器编号 node0 、node1 、node2 ,现在有3000万个key ,希望可以将这些个key均匀的缓存到三台机器上,你会想到什么方案呢?
  我们可能首先想到的方案,是取模算法 hash(key)% N ,对key进行hash运算后取模,N是机器的数量。key进行hash后的结果对3取模,得到的结果一定是0、1或者2,正好对应服务器node0 、node1 、node2 ,存取数据直接找对应的服务器即可,简单粗暴,完全可以解决上述的问题。
  hash的问题
  取模算法虽然使用简单,但对机器数量取模,在集群扩容和收缩时却有一定的局限性,因为在生产环境中根据业务量的大小,调整服务器数量是常有的事;而服务器数量N发生变化后 hash(key)% N 计算的结果也会随之变化。
  比如:一个服务器节点挂了,计算公式从 hash(key)% 3 变成了hash(key)% 2 ,结果会发生变化,此时想要访问一个key,这个key的缓存位置大概率会发生改变,那么之前缓存key的数据也会失去作用与意义。
  大量缓存在同一时间失效,造成缓存的雪崩,进而导致整个缓存系统的不可用,这基本上是不能接受的,为了解决优化上述情况,一致性hash算法应运而生~
  那么,一致性哈希算法又是如何解决上述问题的?  一致性hash
  一致性hash算法本质上也是一种取模算法,不过,不同于上边按服务器数量取模,一致性hash是对固定值2^32取模。  "
  IPv4的地址是4组8位2进制数组成,所以用2^32可以保证每个IP地址会有唯一的映射
  hash环
  我们可以将这2^32个值抽象成一个圆环 ( 不得意圆的,自己想个形状,好理解就行 ),圆环的正上方的点代表0,顺时针排列,以此类推,1、2、3、4、5、6……直到2^32-1,而这个由2的32次方个点组成的圆环统称为hash环 。
  那么这个hash环和一致性hash算法又有什么关系嘞?我们还是以上边的场景为例,三台缓存服务器编号 node0 、node1 、node2 ,3000万个key 。
  服务器映射到hash环
  这个时候计算公式就是从 hash(key)% N  变成了hash(服务器ip)% 2^32 ,使用服务器IP地址进行hash计算,用哈希后的结果对2^32取模,结果一定是一个0到2^32-1之间的整数,而这个整数映射在hash环上的位置代表了一个服务器,依次将node0 、node1 、node2 三个缓存服务器映射到hash环上。
  对象key映射到hash环
  接着再将需要缓存的key对象也映射到hash环上, hash(key)% 2^32 ,服务器节点和要缓存的key对象都映射到了hash环,那对象key具体应该缓存到哪个服务器上呢?
  对象key映射到服务器  "
  从缓存对象key的位置开始,沿顺时针方向遇到的第一个服务器,便是当前对象将要缓存到的服务器 。
  因为被缓存对象与服务器hash后的值是固定的,所以,在服务器不变的条件下,对象key必定会被缓存到固定的服务器上。根据上边的规则,下图中的映射关系:  key-1 -> node-1 key-3 -> node-2 key-4 -> node-2 key-5 -> node-2 key-2 -> node-0
  如果想要访问某个key,只要使用相同的计算方式,即可得知这个key被缓存在哪个服务器上了。  一致性hash的优势
  我们简单了解了一致性hash的原理,那它又是如何优化集群中添加节点和缩减节点,普通取模算法导致的缓存服务,大面积不可用的问题呢?
  先来看看扩容的场景,假如业务量激增,系统需要进行扩容增加一台服务器 node-4 ,刚好node-4 被映射到node-1 和node-2 之间,沿顺时针方向对象映射节点,发现原本缓存在node-2 上的对象key-4 、key-5 被重新映射到了node-4 上,而整个扩容过程中受影响的只有node-4 和node-1 节点之间的一小部分数据。
  反之,假如 node-1 节点宕机,沿顺时针方向对向映射节点,缓存在node-1 上的对象key-1 被重新映射到了node-4 上,此时受影响的数据只有node-0 和node-1 之间的一小部分数据。
  从上边的两种情况发现,当集群中服务器的数量发生改变时,一致性hash算只会影响少部分的数据,保证了缓存系统整体还可以对外提供服务的。  数据偏斜问题
  前边为了便于理解原理,画图中的node节点都很理想化的相对均匀分布,但理想和实际的场景往往差别很大,就比如办了个健身年卡的我,只去过健身房两次,还只是洗了个澡。
  想要健身的你
  在服务器节点数量太少的情况下,很容易因为节点分布不均匀而造成 数据倾斜的 问题,如下图被缓存的对象大部分缓存在node-4 服务器上,导致其他节点资源浪费,系统压力大部分集中在node-4 节点上,这样的集群是非常不健康的。
  解决数据倾斜的办法也简单,我们就要想办法让节点映射到hash环上时,相对分布均匀一点。
  一致性Hash算法引入了一个 虚拟节点 机制,即对每个服务器节点计算出多个hash值,它们都会映射到hash环上,映射到这些虚拟节点的对象key,最终会缓存在真实的节点上。
  虚拟节点的hash计算通常可以采用,对应节点的IP地址加数字编号后缀 hash(10.24.23.227#1)  的方式,举个例子,node-1节点IP为10.24.23.227,正常计算node-1 的hash值。 hash(10.24.23.227#1)% 2^32
  假设我们给node-1设置三个虚拟节点, node-1#1 、node-1#2 、node-1#3 ,对它们进行hash后取模。 hash(10.24.23.227#1)% 2^32 hash(10.24.23.227#2)% 2^32 hash(10.24.23.227#3)% 2^32
  下图加入虚拟节点后,原有节点在hash环上分布的就相对均匀了,其余节点压力得到了分摊。
  "
  但需要注意一点,分配的虚拟节点个数越多,映射在hash环上才会越趋于均匀,节点太少的话很难看出效果
  引入虚拟节点的同时也增加了新的问题,要做虚拟节点和真实节点间的映射, 对象key->虚拟节点->实际节点 之间的转换。
  一致性hash的应用场景
  一致性hash在分布式系统中应该是实现负载均衡的首选算法,它的实现比较灵活,既可以在客户端实现,也可以在中间件上实现,比如日常使用较多的缓存中间件 memcached 和redis 集群都有用到它。
  memcached的集群比较特殊,严格来说它只能算是 伪集群 ,因为它的服务器之间不能通信,请求的分发路由完全靠客户端来的计算出缓存对象应该落在哪个服务器上,而它的路由算法用的就是一致性hash。
  还有redis集群中hash槽的概念,虽然实现不尽相同,但思想万变不离其宗,看完本篇的一致性hash,你再去理解redis槽位就轻松多了。
  其它的应用场景还有很多:  RPC 框架Dubbo 用来选择服务提供者分布式关系数据库分库分表:数据与节点的映射关系 LVS 负载均衡调度器..................... 总结
  简单地阐述了下一致性hash,如果有不对的地方大家可以留言指正,任何技术都不会十全十美,一致性Hash算法也是有一些潜在隐患的,如果Hash环上的节点数量非常庞大或者更新频繁时,检索性能会比较低下,而且整个分布式缓存需要一个路由服务来做负载均衡,一旦路由服务挂了,整个缓存也就不可用了,还要考虑做高可用。
  不过话说回来,只要是能解决问题的都是好技术,有点副作用还是可以忍受的。

美团外卖到底抽了多少佣金?斑马消费范建外卖每送一单亏损超1元。上周五晚间,美团披露2021年业绩后,周末公司就委屈地冲上了热搜。王兴这么算,其实不客观。去年四季度美团外卖交易量39。106亿单,公司向商家收特斯拉计划今年完成Cybertruck开发,2023年投产埃隆马斯克对最近退居媒体关注度二线的特斯拉Cybertruck发表了新评论,并表示该汽车制造商的目标是今年完成Cybertruck的开发,2023年投产。当特斯拉在2019年推出C苹果新增iPhone14Max砍掉mini,14Pro起售来到九千?苹果知道小屏市场已经从高速增长变为高质量增长,首先是那群天天在网上叫的灵活小屏旗舰用户压根撑不起来市场,二是小屏也无法堆更多配置,这就是很多人口中说的甚至连个双卡都不给我。所谓的小新款RedmiBookPro14上架,到手价4799起在3月17日,Redmi红米发布了全新的K50系列手机和RedmiBookPro152022等一系列产品,而在3月28日,RedmiBookPro系列的14英寸新品也终于正式上架,佳能庆祝在全球可换镜数码相机市场连续19年占有率第一佳能公司今天宣布旗下的可换镜数码相机(数码单反相机及微单相机)从2003年至2021年,已经连续19年实现全球市场占有率第一。适合专业摄影师和爱好者使用的EOSR3全画幅专微相机秉红米K50使用3天后上手体验,聊聊优缺点和一些使用感受我们目前已经了解到红米k50这款手机的定金预售量已经超过了15万台,那么究竟是什么原因导致这款手机能够受到市场的追捧,到底他值不值得去买?我们希望能够给大家一些建议,下面跟大家聊一人在外省想在老家装监控,在手机上能看,要什么条件和材料?你好,很高兴回答你的问题,因为过年的时候我也在老家安装了监控,希望我的回答能给你一些帮助。一选材你得先确认监控是安装在哪里的?是室内还是室外?如果是室外,要安装监控的地方是漏天的还理想L9将在4月16日发布纯电续航215km,5。3秒可破百关于理想的第二款车型理想L9,近日又有了新的消息。有媒体报道,理想L9将会在4月16日正式发布。此前,关于理想L9内饰以及部分的配置信息,理想汽车官方也已经对外公布。售价方面,新车奇瑞新款QQ冰淇淋5月20日上市!车身加长,4S店大幅涨价根据规划奇瑞新能源QQ冰淇淋桃欢喜版将于二季度正式上市。汽车元宇宙从iCar生态经销商处获悉,新车将于5月20日上市,售价为53,520元,相比在售顶配车型贵了6,520元。桃欢喜油价上涨,对于新能源车,燃油车有啥影响?最近由于油价的上涨,让很多燃油车主苦不堪言,我身边有很多车主称都想坐公交出行了,目前北京的92号汽油已经涨到了7。42元每升,95号汽油涨到了7。9元每升,98号汽油涨到了8。88德国美诺Miele重磅新品BoostCX1荣耀上市揭晓新生匠心投注,力求完善,只为呈上品质非凡的产品。自1899年创立以来,百年高端家电品牌德国美诺Miele将ImmerBesser(不断超越)品牌精神恪守至今,以匠心造就横跨两个世纪的卓
嵌入式培训面向初学者的Linux目录结构Linux目录结构就像一棵树,Linux文件系统层次结构的基础从根开始,目录将从根开始分支,但所有内容都从根开始。参加嵌入式培训,可以学到很多关于Linux的知识,帮你快速入门。L2500元就能买到的真香机。870处理器5000mAh大电池这是9。22号下午三点发布的真我最新款。处理器处理器搭载了高通骁龙8705G处理器,这款CPU的主频高达3。2GHz,采用7nm的制成工艺,功耗更低,性能却不减。强悍实力与低功耗相iPhone开始测试挖孔屏,难道要放弃FaceID?近日数码闲聊站爆料,有款新iPhone正在测试120Hz打孔屏,而上月王腾也曾透露下一代苹果会用挖孔屏,可见消息还是挺准确的。去掉刘海后,FaceID怎么办?用屏下指纹代替,屏下指iPhone14ProMax代号曝光,去除刘海4800万主摄2TB容量,等到了近几年,苹果在外观和硬件上的升级依旧采用挤牙膏的模式,导致不少果粉宁愿换个新电池,继续使用老款机型,稳稳地当个钉子户,也不愿意更换新机,只为等一款彻底改变现状的iPhone真旗舰机红米Note11Pro再确认,IP68防水6000mAh120W,售价已定1999起如今的千元机市场竞争也很残酷,各种性价比新机层出不穷,不断涌现。再加上高端机价格持续走高,如华为荣耀高端机的价格已经到七八千,有多少人能消费得起?现在消费者都更青睐于中端市场,各大大容量高性价比固态硬盘,铭瑄复仇者M。21T因为挖矿热潮的关系,市场上机械硬盘的价格翻了几番,相信普通玩家已经对之望而却步。不过好在曾经高高在上的NVMe高速固态硬盘的价格有所松动,特别是有几款产品的性价比十分突出,例如我这苹果为什么不买华为的基带?首先说的是,苹果购买华为基带的可能性不大,华为自家的手机出货量超过1亿台,苹果也是出货量大户。1关于苹果采购华为基带华为基带仅能满足自家需求,另一方面目前来看华为并没有出售自家基带买华为支持国货,还是为了系统买iPhone13,你会怎么做?坚决买华为支持国货,从爱国的角度讲,现在中国和美国的争斗这么激烈,中国人肯定要支持自己的民族品牌。从使用体验和信息安全的角度讲,华为的信息安全架构那是百分百放心的,华为的鸿蒙操作系黑华为,黑国产的是同一批人吗?他们是不是同一批人,并不一定,但他们的目的就是为了获得自己的利益我认为是两类人,一种是品牌的极端粉,只是看问题的角度不同而黑华为。而另一种是怀有险恶目的,它们对中国社会制度强烈抵触诺基亚为何宁可逐渐走向没落也不采用Android系统?昔日手机霸主诺基亚未能搭上智能手机的快车,而逐渐走向没落,为什么诺基亚不采用Android系统呢?诺基亚如何走向辉煌诺基亚,1865年在芬兰创立,是一家主要从事移动通信设备生产和相借呗花呗逾期两个多月,还没催收,需要主动联系支付宝报备吗?不需要。因为你逾期之后,不管你有没有报备,支付宝肯定都会催收。当然,如果你能在一两个月之内确定能还上欠款,那你可以和支付宝说明自身情况协商沟通,取得他们的同意,延期还款。如果你没有