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

系统架构考试中的那些技术之一致性哈希算法

  #计算机软考#
  出处:(2022年,案例分析,试题四,问题2)
  随着业务的发展,仓储中心以及商品的数量日益增加,需要对集群部署多个缓存节点,提高缓存的处理能力。李工建议采用缓存分片方法,把缓存的数据拆分到多个节点分别存储,减轻单个缓存节点的访问压力,达到分流效果。缓存分片方法常用的有哈希算法和一致性哈希算法,李工建议采用一致性哈希算法来进行分片。请用200字以内的文字简要说明两种算法的基本原理,并说明李工采用一致性哈希算法的原因。
  参考答案:
  哈希算法通过某种哈希算法散列得到一个值,按该值将数据分配到集群响应节点进行缓存。
  一致性哈希算法将整个哈希值空间映射成一个按顺时针方向组织的虚拟圆环,使用哈希算法算出数据哈希值,然后根据哈希值的位置沿圆环顺时针查找,将数据分配到第一个遇到的集群节点进行缓存。
  一致性哈希算法有两大优点:
  1)可扩展性。一致性哈希算法保证了增加或减少服务器时,数据存储的该变量少,相比传统哈希算法大大节省了数据移动的开销。
  2)更好地适应数据的快速增长。
  知识拓展:
  以下内容转载自:https://mp.weixin.qq.com/s/hJHMlbQpANwMjx9BetwkUg一致性哈希算法详解
  1. 如何分配请求
  大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。
  现在有那么多个节点,要如何分配客户端的请求呢?
  其实这个问题就是「负载均衡问题」。解决负载均衡问题的算法很多,不同的负载均衡算法,对应的就是不同的分配策略,适应的业务场景也不同。
  最简单的方式,引入一个中间的负载均衡层,让它将外界的请求「轮流」的转发给内部的集群。比如集群有 3 个节点,外界请求有 3 个,那么每个节点都会处理 1 个请求,达到了分配请求的目的。
  考虑到每个节点的硬件配置有所区别,我们可以引入权重值,将硬件配置更好的节点的权重值设高,然后根据各个节点的权重值,按照一定比重分配在不同的节点上,让硬件配置更好的节点承担更多的请求,这种算法叫做加权轮询。
  加权轮询算法使用场景是建立在每个节点存储的数据都是相同的前提。所以,每次读数据的请求,访问任意一个节点都能得到结果。
  但是,加权轮询算法是无法应对「分布式系统」的,因为分布式系统中,每个节点存储的数据是不同的。
  当我们想提高系统的容量,就会将数据水平切分到不同的节点来存储,也就是将数据分布到了不同的节点。比如 一个分布式 KV(key-valu) 缓存系统,某个 key 应该到哪个或者哪些节点上获得,应该是确定的 ,不是说任意访问一个节点都可以得到缓存结果的。
  因此,我们需要一个能应对分布式系统的负载均衡算法。
  2. 使用哈希算法有什么问题?
  对同一个关键字进行哈希计算,每次计算都是相同的值,这样就可以将某个 key 确定到一个节点了,可以满足分布式系统的负载均衡需求。
  哈希算法最简单的做法就是进行取模运算,比如分布式系统中有 3 个节点,基于  hash(key) % 3   公式对数据进行了映射。
  如果客户端要获取指定 key 的数据,通过下面的公式可以定位节点: hash(key) % 3
  如果经过上面这个公式计算后得到的值是 0,就说明该 key 需要去第一个节点获取。
  但是有一个很致命的问题, 如果节点数量发生了变化,也就是在对系统做扩容或者缩容时,必须迁移改变了映射关系的数据 ,否则会出现查询不到数据的问题。
  举个例子,假设有一个由 A、B、C 三个节点组成分布式 KV 缓存系统,基于计算公式  hash(key) % 3   将数据进行了映射,每个节点存储了不同的数据:
  现在有 3 个查询 key 的请求,分别查询 key-01,key-02,key-03 的数据,这三个 key 分别经过 hash() 函数计算后的值为 hash( key-01) = 6、hash( key-02) = 7、hash(key-03) = 8,然后再对这些值进行取模运算。
  通过这样的哈希算法,每个 key 都可以定位到对应的节点。
  当 3 个节点不能满足业务需求了,这时增加了一个节点,节点的数量从 3 变化为 4,意味取模哈希函数中基数的变化,这样会导致 大部分映射关系改变 ,如下图:
  比如,之前的 hash(key-01) %  3   = 0,就变成了 hash(key-01) % 4   = 2,查询 key-01 数据时,寻址到了节点 C,而 key-01 的数据是存储在节点 A 上的,不是在节点 C,所以会查询不到数据。
  同样的道理,如果我们对分布式系统进行缩容,比如移除一个节点,也会因为取模哈希函数中基数的变化,可能出现查询不到数据的问题。
  要解决这个问题的办法,就需要我们进行 迁移数据 ,比如节点的数量从 3 变化为 4 时,要基于新的计算公式 hash(key) % 4 ,重新对数据和节点做映射。
  假设总数据条数为 M,哈希算法在面对节点数量变化时, 最坏情况下所有数据都需要迁移,所以它的数据迁移规模是 O(M) ,这样数据的迁移成本太高了。
  所以,我们应该要重新想一个新的算法,来避免分布式系统在扩容或者缩容时,发生过多的数据迁移。
  3. 使用一致性哈希算法有什么问题
  一致性哈希算法就很好地解决了分布式系统在扩容或者缩容时,发生过多的数据迁移的问题。
  一致哈希算法也用了取模运算,但与哈希算法不同的是,哈希算法是对节点的数量进行取模运算,而 一致哈希算法是对 2^32 进行取模运算,是一个固定的值 。
  我们可以把一致哈希算法是对 2^32 进行取模运算的结果值组织成一个圆环,就像钟表一样,钟表的圆可以理解成由 60 个点组成的圆,而此处我们把这个圆想象成由 2^32 个点组成的圆,这个圆环被称为 哈希环 ,如下图:
  一致性哈希要进行两步哈希: 第一步:对存储节点进行哈希计算,也就是对存储节点做哈希映射,比如根据节点的 IP 地址进行哈希; 第二步:当对数据进行存储或访问时,对数据进行哈希映射;
  所以, 一致性哈希是指将「存储节点」和「数据」都映射到一个首尾相连的哈希环上 。
  问题来了,对「数据」进行哈希映射得到一个结果要怎么找到存储该数据的节点呢?
  答案是,映射的结果值往 顺时针的方向的找到第一个节点 ,就是存储该数据的节点。
  举个例子,有 3 个节点经过哈希计算,映射到了如下图的位置:
  接着,对要查询的 key-01 进行哈希计算,确定此 key-01 映射在哈希环的位置,然后从这个位置往顺时针的方向找到第一个节点,就是存储该 key-01 数据的节点。
  比如,下图中的 key-01 映射的位置,往顺时针的方向找到第一个节点就是节点 A。
  所以,当需要对指定 key 的值进行读写的时候,要通过下面 2 步进行寻址: 首先,对 key 进行哈希计算,确定此 key 在环上的位置; 然后,从这个位置沿着顺时针方向走,遇到的第一节点就是存储 key 的节点。
  知道了一致哈希寻址的方式,我们来看看,如果增加一个节点或者减少一个节点会发生大量的数据迁移吗?
  假设节点数量从 3 增加到了 4,新的节点 D 经过哈希计算后映射到了下图中的位置:
  可以看到,key-01、key-03 都不受影响,只有 key-02 需要被迁移节点 D。
  假设节点数量从 3 减少到了 2,比如将节点 A 移除:
  可以看到,key-02 和 key-03 不会受到影响,只有 key-01 需要被迁移节点 B。
  因此, 在一致哈希算法中,如果增加或者移除一个节点,仅影响该节点在哈希环上顺时针相邻的后继节点,其它数据也不会受到影响 。
  上面这些图中 3 个节点映射在哈希环还是比较分散的,所以看起来请求都会「均衡」到每个节点。
  但是 一致性哈希算法并不保证节点能够在哈希环上分布均匀 ,这样就会带来一个问题,会有大量的请求集中在一个节点上。
  比如,下图中 3 个节点的映射位置都在哈希环的右半边:
  这时候有一半以上的数据的寻址都会找节点 A,也就是访问请求主要集中的节点 A 上,这肯定不行的呀,说好的负载均衡呢,这种情况一点都不均衡。
  另外,在这种节点分布不均匀的情况下,进行容灾与扩容时,哈希环上的相邻节点容易受到过大影响,容易发生雪崩式的连锁反应。
  比如,上图中如果节点 A 被移除了,当节点 A 宕机后,根据一致性哈希算法的规则,其上数据应该全部迁移到相邻的节点 B 上,这样,节点 B 的数据量、访问量都会迅速增加很多倍,一旦新增的压力超过了节点 B 的处理能力上限,就会导致节点 B 崩溃,进而形成雪崩式的连锁反应。
  所以, 一致性哈希算法虽然减少了数据迁移量,但是存在节点分布不均匀的问题 。
  4. 如何通过虚拟节点提高均衡度
  要想解决节点能在哈希环上分配不均匀的问题,就是要有大量的节点,节点数越多,哈希环上的节点分布的就越均匀。
  但问题是,实际中我们没有那么多节点。所以这个时候我们就加入 虚拟节点 ,也就是对一个真实节点做多个副本。
  具体做法是, 不再将真实节点映射到哈希环上,而是将虚拟节点映射到哈希环上,并将虚拟节点映射到实际节点,所以这里有「两层」映射关系。
  比如对每个节点分别设置 3 个虚拟节点: 对节点 A 加上编号来作为虚拟节点:A-01、A-02、A-03 对节点 B 加上编号来作为虚拟节点:B-01、B-02、B-03 对节点 C 加上编号来作为虚拟节点:C-01、C-02、C-03
  引入虚拟节点后,原本哈希环上只有 3 个节点的情况,就会变成有 9 个虚拟节点映射到哈希环上,哈希环上的节点数量多了 3 倍。
  你可以看到, 节点数量多了后,节点在哈希环上的分布就相对均匀了 。这时候,如果有访问请求寻址到「A-01」这个虚拟节点,接着再通过「A-01」虚拟节点找到真实节点 A,这样请求就能访问到真实节点 A 了。
  上面为了方便你理解,每个真实节点仅包含 3 个虚拟节点,这样能起到的均衡效果其实很有限。而在实际的工程中,虚拟节点的数量会大很多,比如 Nginx 的一致性哈希算法,每个权重为 1 的真实节点就含有160 个虚拟节点。
  另外,虚拟节点除了会提高节点的均衡度,还会提高系统的稳定性。 当节点变化时,会有不同的节点共同分担系统的变化,因此稳定性更高 。
  比如,当某个节点被移除时,对应该节点的多个虚拟节点均会移除,而这些虚拟节点按顺时针方向的下一个虚拟节点,可能会对应不同的真实节点,即这些不同的真实节点共同分担了节点变化导致的压力。
  而且,有了虚拟节点后,还可以为硬件配置更好的节点增加权重,比如对权重更高的节点增加更多的虚拟机节点即可。
  因此, 带虚拟节点的一致性哈希方法不仅适合硬件配置不同的节点的场景,而且适合节点规模会发生变化的场景 。

去外蒙古,1000元人民币可以生活多久?说出来难以置信第一次到外蒙古旅行,你完全想不到1000元人民币能享受哪些服务?(此处已添加小程序,请到今日头条客户端查看)从中国版图来看,外蒙古一直是我国重要的边疆地区,但因为战争原因,外蒙独立有一种病不能养尊处优养尊处优,在很多人看来,是生活的优越感才能体现的。指的是有钱的人,也就是富人们,在生活中有人伺候,在很优越富裕的环境中生活,在旧时的电影中,那些富家子弟,过着纸醉金迷,花天酒地,游肠息肉常吃这五种食物,抑制息肉,给肠子搓搓澡已有研究证实95以上的大肠癌都是由于肠道息肉引起的,肠道息肉主要有两种恶变的几率比较大。那么该如何预防肠道长息肉?当肠道废物过多的时候,就会刺激肠道内壁产生息肉,多吃这5道便宜菜,每天都吃降糖药,分不清饭前饭后啥时吃,怎么办?上次介绍了基层常用的几种降糖药的副作用,今天来说说这几种降糖药的服药时间。餐前半小时磺脲类(药名带格列的,如优降糖达美康格列吡嗪)。这些药物能够促胰岛素分泌,服药后30分钟起效,所多吃这几种食物对身体好研究发现,有些食物的营养成分,对女性特别有好好处。所以女性要想长寿,要想健康,要想青春,就得学会选择食物。1蓝莓果汁如果把浆果比作营养宝石的话,那么野生蓝莓就是王冠。它是天然的最给外阴白斑对症忌口01忌肥腻油煎霉变腌制食物。油腻食物,会让皮肤问题增多新陈代谢变缓,影响药物吸收与排毒加重患者肠胃负担,营养吸收不足引起身体上火,情绪变得暴躁,这都会影响外阴白斑的病情。发霉食物,过敏性鼻炎,秋冬养阴,动则阳生过敏性鼻炎,东风吹,乌云随,早晨气温与昨天早晨比回升了,马上降温降雨。避寒保暖保湿。天空布满乌云,天空灰蒙蒙,秋冬养阴。季节变更带给过敏性鼻炎朋友巨大灾难,随之而来,就要养阴,有些秋季防燥(下篇)预防秋燥生活起居有常内经指出秋三月,此谓容平早卧早起,与鸡俱兴。使志安宁,以缓秋形,收敛神气,使秋气平,无外其志,使肺气清,此秋气之应,养收之道也。也就是说,秋季养生首先要做到早睡总台记者专访丨德专家美联储加息将影响全球经济美联储21日再次宣布加息后,中央广播电视总台记者采访了德国法兰克福金融管理学院经济学教授吕舍尔。他表示,此举会对全球经济增长造成冲击。吕舍尔表示,由于美国是世界经济的重要一环,此次2022全球总决赛入围赛赛程利好LPL和LCK赛区,RNG首战即决战游戏酱park原创9月22日,英雄联盟官方正式公布了2022全球总决赛入围赛赛程。入围赛将于北京时间9月30日400开启,揭幕首战由ISG(LLA赛区)与MAD(LEC赛区)率先打4599元起!ROG6天玑首发值得入手?看看内行媒体如何评价作为首款天玑9000电竞游戏手机,ROG游戏手机6天玑版本自面世以来受到了不少消费者关注。今天,ROG游戏手机6天玑系列也正式迎来了首销,12256GB版本4599元起。其中,RO一个家庭是兴旺还是衰败,冥冥之中早有注定,看三个地方图源自网络侵权请联系删除有句话说家和万事兴。这里所说的和,不仅是指彼此之间和睦融洽,更是指各家庭成全之间心和和心齐,只有全家人一起努力,劲儿往一处使,才能朝着更好的方向发展。如果彼励志的句子1。回避现实的人,未来将更不理想。2。请用今天的努力让明天没有遗憾。3。最大的悲剧,恰是善与善的冲突。4。人一简单就快乐,一世故就变老。5。有多大的思想,才有多大的能量。6。难过就萌萌细语醉了,醉了!竟然,粥也能醉人只有小事司马小萌新闻人有着常人无法仿效的单纯与快乐。不信,你瞧!看看哪位同行进入了今天我的散文中。司马小萌2022年9月21日泰州晚报8版小区里,来自东北的大姐在林间空地舞动彩绸。秋光不悲秋秋光不悲秋文槿伶重阳茱萸劝酒杯,无意黄花逸兴催。盛世难逢且一笑,黄菊堪插满头归。当今满头蓬鬓改,怎是英才镱中回。重阳萧瑟故人稀,且做登高雁南飞。今日醉饮杯中酒,又笑身世昔人非。王孙偷偷告诉你,为什么不能随便接别人的梦话?(原谅我笑出来声音)为什么不能随便接梦话?人在睡着的时候很容易说些不干净的话,也就是脏话,让人不解邪门的是,这个设定从来不考虑人设,不管他平时有多礼貌,都有可能在说梦话时口吐芬芳。很多时候那三两句脏话闭上眼睛,会不会就看不到苦难寻亲14年终于等来大团圆的孙海洋和她的女儿出了一本书回家,虽然还未阅读其中的内容,但已经感受到了过程的艰辛和痛苦的忍耐。面对这样内容的书,我的本能反应是不要读,只要读下去,就免不了感谢你在最美的年华里与我相遇你我相聚芳华,因为一次偶然的机遇,让我们在最美的年华成为了最亲密的朋友。遇见你是我三生有幸,你成功融入到了我的生活中,上课看的是你,下课嚼的是你,睡觉的时候梦到的还是你,你与我不可爱情里的永远有多远?爱有多久就有多远爱,会走走停停,与你生离死别,与你缘聚缘散,与你千回百转,这便是爱的残酷。我们爱的那个人会变,相拥或转身之际,可能就已经陌生得不再是从前我们自己也会变,爱与不爱之间,可能都已经回不中年以后,不要自作多情做人与做事。做人做事的基本原则做事先做人,立业先立德!什么是成熟?有人说,成熟是看清了真情假意,变得越来越宽容,什么都可以接受。也有人说,成熟就是吃过了人间的苦,依然热爱生活,依然这一款新手机还很不错马上的国庆假日快要到来了,我向给女朋友网上买一款新手机,不管是颜值还是性能上都要出众,荣耀60SE这款我个人觉得还可以。这款手机内置4300毫安时的超大电池容量,还支持66W智慧超成年人的第二台手机选这款仅售299元不少朋友因为工作或是生活的需求会拥有23张手机卡,便于日常处理相关事务,一台智能手机是日常使用,那么第二台手机还应该选择智能手机吗?诺基亚的这款215十分符合成年人对第二台手机的需
惨败24分,老鹰遭主场球迷狂嘘!361044,巴特勒完爆特雷杨今天老鹰继续坐镇主场迎战迈阿密热火,此役洛瑞因伤缺阵,老鹰这边卡佩拉复出。首节比赛双方打得难解难分,老鹰单节领先1分。第二节初段老鹰发力把分差扩大到7分,但此后老鹰进攻突然断电,被篮网究竟怎么了三场过后,杜兰特对比赛的形容和托翁的小新娘并无不同,恶心,太恶心了。附加赛和之前一些比赛营造的幻象彻底破灭了,历史上技术最好的二人组在季后赛里被打到了0比3,篮网已经只剩一只手还抓哈登腿筋二级拉伤十天就复出,篮网真是自作孽不可活今天看到洛瑞休息,突然就觉得篮网被横扫也是活该!真是自作孽不可活啊!洛瑞腿部紧张热火立马轮休。布克腿筋一级拉伤宣布最少休息34周!而去年哈登在篮网腿筋二级拉伤只休息10天就被迫出来一年支出1亿!CBA两队公布财务报告,巨亏4037万,姚明何去何从CBA联赛如今已经进入总决赛阶段,因为浙江广厦核心胡金秋和赵岩昊提前赛季报销,辽宁男篮占据了绝对优势地位,就算浙江广厦后面打出了逆天表现,CBA联赛本赛季最慢也要在5月2日全面结束鹈鹕吊打太阳!莺歌瓦兰主导胜局,琼斯锁死保罗,艾顿含泪输球北京时间4月25号太阳和鹈鹕G4的比赛,这场比赛太阳出现的问题还是在第三节,再度出现崩盘。也没有办法,之前都是布克在这一节顶着,现在没有了布克,确实很影响球队在球场上的统治力。也正2022年NBA著名教练薪资盘点,教练如巨星般同样耀眼(1115)作为一名NBA球员,在结束一天的训练和比赛之后,丰厚的薪水并不是唯一的收获众所周知,联盟的主教练们仅仅是在白板上写下X和O,喊出比赛口号,带领他们的球队赢得总冠军,就能赚到不菲的薪篮网03凯尔特人,KD欧文或被横扫?本赛季季后赛开赛前,没有人会想到,同时拥有两位联盟前五超巨的篮网,会在季后赛首轮被03逼入绝境!众所周知,在7场4胜制的系列赛中,03意味着半只脚已经被淘汰,另外半只脚也踩在了悬崖公开道歉!斯诺克名宿承认错误,进行反思后发声颜丙涛没有问题2022年4月25日,斯诺克世锦赛第二轮即将结束,八强即将出炉,目前还有四个席位待定,八位选手结束两个阶段比赛,分别是希金斯115诺庞。桑坎姆,特鲁姆普106麦克吉尔,利索夫斯基9李铁和李霄鹏尴尬不?国脚随U23国足集训后感叹训练量好大根据记者马德兴的报道,5名国脚加入U23国足的训练营,让U23国足的进攻更加立体。此外,超龄国脚和U23国足进行了4堂训练课之后也私下感慨,已经很久没有进行如此大量的训练课了。一方NBA季后赛小前锋终极对比塔图姆完胜杜兰特本赛季NBA季后赛如火如荼的举行着,东部赛区有的交战双方对阵处于胶着状态,但被寄予最大可能的以下克上的篮网队,却令人大失所望。布鲁克林篮网队在本赛季季后赛中已经连输3场,总比分以0李兰娟早餐是养肝的黄金期,8种食物敞开吃,或对肝有好处在日常生活中,我们大家都知道,早餐是一天中最重要的一餐了,孩子上学要吃早餐,年轻人上班也要吃早餐,就是年龄大了,也要早早起床,吃过早饭再去锻炼。院士李兰娟曾经也说过早餐是养肝的黄金