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

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

  #计算机软考#
  出处:(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 个虚拟节点。
  另外,虚拟节点除了会提高节点的均衡度,还会提高系统的稳定性。 当节点变化时,会有不同的节点共同分担系统的变化,因此稳定性更高 。
  比如,当某个节点被移除时,对应该节点的多个虚拟节点均会移除,而这些虚拟节点按顺时针方向的下一个虚拟节点,可能会对应不同的真实节点,即这些不同的真实节点共同分担了节点变化导致的压力。
  而且,有了虚拟节点后,还可以为硬件配置更好的节点增加权重,比如对权重更高的节点增加更多的虚拟机节点即可。
  因此, 带虚拟节点的一致性哈希方法不仅适合硬件配置不同的节点的场景,而且适合节点规模会发生变化的场景 。

肖战105条经典语录合集关于肖战,本本认为人物杂志的一段评价特别精准,他是浪漫的实干派,磊落的野心家,温柔的掌控者,谨慎的破局人,诗意的工作狂。他是藏巧于拙的天才,是洞明练达的赤子,是敏感多情的乐天派。肖印度大乱!民众烧车封路,暴力抗议已蔓延8个邦,美西方沉默文东风近日,印度莫迪政府宣布了一项新的征兵改革计划,不过,这项举动随即引发了印度民众的暴力抗议。愤怒的年轻人点燃至少12辆客运火车,破坏政府办公室公共汽车和警车,在高速公路上烧毁轮足协官方技术总监克瑞斯因个人原因不再续约直播吧6月19日讯足协官方宣布,技术总监克瑞斯不再续约。官方公告经友好协商,现任中国足协技术总监克瑞斯范普维尔德因个人原因不再与中国足协续约,并将于6月20日返回比利时。在此,由衷变形金刚上映15周年暑期档将在北美院线重映1905电影网讯2007年,由迈克尔贝执导的变形金刚上映,随后便开启了全系列的征程。如今,恰逢第一部上映15周年纪念,派拉蒙公司决定,要在北美院线重映本片。具体的上映时间是7月10毛主席写给蒋介石信,字迹更精妙,字字倾斜,坚决挺拔,气吞山河少见,绝对是少见,相信谁看到后,都会这样说道,的确,毛主席的书信很多,写给社会各界的书信都有,也非常常见,而写给蒋介石的书信,着实是少见,这不,就有毛主席写给蒋介石的书信示人,这字2016年,北京女孩挤走富豪原配后上位,一年后富豪800万让她离开北京女子陈小莲(化名)为爱情挤走富豪丁宇(化名)的原配张丽(化名),她满心欢喜嫁入豪门,谁知婚后一地鸡毛,甚至她还患上了重度抑郁。究竟发生了什么?上位豪门的陈小莲为何会重度抑郁?陈俄罗斯女演员谴责俄武装部队被批只是为了钱在银幕上与纳粹作战近日,俄罗斯女演员伊琳娜斯塔申鲍姆(IrinaStarshenbaum)谴责俄罗斯武装部队为保护顿巴斯居民而采取的特别行动。作家ZakharPrilepin对琳娜斯塔申鲍姆提出了严涉案金额高达10亿!ATO严打虚假退税,本周连发19张逮捕令Yahoo新闻报道称,自今年1月至今,澳洲税务部门一直都在严查税务欺诈,并成功阻止了大量虚假退税申请,涉及金额高达10亿澳元。由澳洲税务局(ATO)领导的一个特别工作组与联邦警察配脑回路清奇003航母下水,台湾省军人关注角度,可能你都想不到据新华社报道,我国第三艘航母福建舰于6月17日上午下水,这是我国完全自主设计建造的首艘弹射型航空母舰,采用平直通长飞行甲板,配置电磁弹射和阻拦装置,满载排水量达8万余吨。航母下水后直击高考阅卷现场2022年高考阅卷工作紧张有序进行央广网北京6月18日消息(总台央广记者李杨)2022年高考阅卷工作正在紧张有序进行中。各地通过延长试评时间主观题双评制等方式,努力确保阅卷各环节万无一失。昨天(17日)下午,河南省月薪1。8W但毫无意义的工作你愿意做吗最近,话题月薪1。8W但毫无意义的工作你愿意做吗一度冲上微博热搜第一,阅读量高达5。9亿。这个灵魂拷问起源于小红书网友的发文。内容很短,信息量却很大。该网友在北京某外资企业当助理,
自己交社保的人怎么样才知道自己可以退休了?这个问题非常简单,不管是自己缴社保,还是用人单位给你交社保的,你只要记住两件事,到时候就可以申请办理退休手续了。一个是你知道是哪一年出生的,现在男的正常退休年龄是60周岁女的正常退2022年新农合缴费又涨了,你还交吗?应该是2O21年,如果今年缴费至明年,就是2O22年。不过,在农业银行缴社会养老保险也是从二档2OO元起了。医疗保险缴费还没有开始。有报道讲从28O元年,涨至320元年了。有人认为始终跟着一位领导工作,现在已经接近十年,每次领导升职我都会升职,这样好吗?他从一个乡镇中心校的老师借调到乡政府开始,跟随乡党委书记,一直到乡党书记上了正处级,他上了副处级。你说神奇不神奇。要我说,很神奇。我有一个以前的同事,他的仕途情况和你说的非常相似。事业单位拿着2600工资的合同工,操着公务员的心,工作很痛苦,怎么办?确实,在事业单位里,作为一个合同工,或者应该说是临时工,肯定是痛苦的。第一,工资低。大部分机关事业单位的编外人员收入都是远低于在编人员的,很多地方连正式员工的一半都没有。第二地位低年收入120万,适合买什么车?年收入当达到120万,那么你应该很成功了!估计在以后很多时间你会有很多小三,嗨得不行,过不了多久你会发觉肾亏,身体不支,再贵的车对你来说都不能上路!唯独轮椅适合你!年入120万的人人到中年,你的家庭年收入有多少?我今年50岁了,我家里有老公儿子和我三个人。我一直觉得我的家庭收入是最落后的。四十岁以前,工资少的可怜,每月的工资就花完了,也存不下钱。那时我的工资就够养活我和儿子。紧接着儿子上了天水未来十年会成为铁路交通枢纽吗?天水境内有三个高铁站,分别是,天水南,秦安,东岔退陇铁路是高速铁路,时速160公里小时,达到此速度的铁f路都是高铁比如中老铁路就是160公里小时。天水是甘肃省最早允有铁路的城市,1经过多年发展,深圳现已面临地荒的窘境,房价也居高不下,深圳未来发展该走向何方?深圳大有可为!我从小生活在深圳,算是一个深二代,眼看深圳一步一步发展成为国际大都市,国际创新中心,科技研发中心,我认为深圳未来三十年,经济依然会持续高速发展,原因如下1深圳房价高吗银行存款利率又涨?存10万元每年可领4100元利息,值得存吗?我就在基层银行上班,可以明确的告诉你在如今低利率时代,想要找到存10万,每年可领4100元利息的存款,比你中彩票500万都要难。利率高达4。1,而且还是按年付息。不是我武断,基本上普通人,不想交社保,每年努力存钱,也可以养老的你怎么看?养老要钱,这是肯定的,如果顺风顺水,存的钱足够养老,也未尝不可。但我要说的是既然是普通人,和大富大贵离得就有点远,抗压能力相对来说比较差。人生有很多未知的预期,社保就像给未来带上了退休以档案年龄为主,身份证年龄就没有用了,该怎么办?关于退休时出生时间的认定问题,国家有统一的规定。首先,是依据关于与制止和纠正违反国家规定办理企业职工提前退休有关问题的通知,明确对于职工出生时间的认定,实行居民身份证与职工档案相结