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

你知道哈希算法,但你知道一致性哈希吗?

  前言
  假如让你为淘宝这种数据量非常大的公司的设计一个可扩展的数据存储系统,你该如何存储和管理数据呢?总不能放在单个服务器上吧,肯定放不下,必然需要水平扩展。那么这样就带来一个问题,这个数据要存储在哪个服务器上呢?这就引入了本文的主题一致性哈希算法,可能你没听过,那么本文就通过一个简单的例子带你一步一步认识它。
  欢迎关注个人公众号【JAVA旭阳】 数据线性分布
  假如我们现在有一组服务器,我们想提出一个在这组服务器之间进行数据存储和查找的策略。让我们从一个最最简单的方案开始。假设我们一个接一个地填满服务器,即仅当当前服务器已满时,我们才开始将数据写入下一个服务器。
  在下图中,我们有一个简单的服务器,一次只能存储 4 条记录。当服务器变满时,我们添加一个新服务器并向其添加新数据。
  好吧,这种方法在任何服务器上写入数据时都非常有效。当您被要求读取特定数据时会发生什么?您需要识别存储给定数据的服务器,然后获取它。你如何识别服务器?您会遍历所有服务器并线性扫描每个服务器吗?这会影响读取性能。
  例如:在上面的例子中,如果你被要求查找"New York",因为键和服务器之间没有直接映射,你将不得不线性扫描所有服务器并搜索这个键。
  这样的效率是不是很糟糕,那么有没有更好的解决方案呢。 数据哈希分布
  哈希算法想必大家都知道,Java中的HashMap就是采用的哈希算法。那么根据这个思路,我们提出了一个新的解决方案,数据根据哈希进行存储管理。
  我们看到如果我们有 N 个服务器,则获取记录的时间复杂度将为 O(N)。我们希望在 O(1) 中高效地读写数据。我们首先想到的是提供 O(1) 查找和写入的 HashMap 数据结构。
  让我们看看 Hashing 是否可以解决我们的问题。假设我们有 N 个存储数据的服务器和一个具有分发数据策略的应用程序。该方法类似于 HashMap 使用的方法。首先,对键进行哈希处理,然后确定数据将存放的存储桶。应用程序将首先对密钥进行哈希处理,然后通过计算hash(data) % N来确定哪个服务器。
  上述算法将给出写入数据的服务器编号。此外,在检索数据时,它将使用相同的逻辑,获取服务器编号并获取数据。读取和写入都在 O(1) 中完成。
  让我们来看一个例子。假设我们有三个名为 S0、S1 和 S2 的服务器。我们的钥匙是世界城市名称。使用哈希,我们计算需要将密钥分配到的存储桶或服务器。
  密钥的哈希和计算桶
  密钥分配
  但这在分布式系统中总是有效的吗?我们会遇到以下问题: 如果我们添加更多服务器,则hash(data) % N会有所不同。这意味着我们将不得不在添加新服务器时重新分配所有数据。 如果删除其中一台服务器,我们将遇到同样的问题。由于此处服务器的数量 N 是可变的,因此所有密钥都会受到影响。
  以下是添加新服务器时发生的情况的说明。随着服务器数量从 3 台增长到 4 台,桶的计算逻辑将变为Hash % 4。
  新旧密钥分配
  在添加新服务器时,我们观察到三个键中的两个受到了影响。如果我们添加一个新服务器,键Madrid的桶将是 0 (S0) 而不是 1(S1)。我们必须将此密钥移动到服务器 S1 以确保我们的应用程序找到它。因此,我们必须重新散列所有现有密钥并将它们分配给不同的服务器。在最坏的情况下,这可能会影响系统中的所有密钥。
  看来通过哈希算法将数据分发到不同服务器中还是不大行,那还有什么更好的办法呢?这边就要隆重介绍 一致性哈希 。 什么是一致性哈希?
  当我们想要动态添加或删除服务器时,一致性哈希解决了我们的问题。在简单散列的情况下,添加或删除服务器将影响存储在系统中的所有 M 密钥。然而,一致性哈希确保只有 M/N 键受到影响,其中 N 是服务器的数量。
  一致性哈希使密钥的分布与系统使用的服务器数量无关。因此,我们可以在不影响整个系统的情况下扩大或缩小规模。
  从根本上说,一致性哈希使用哈希环。该算法将每个服务器映射到圆上的一个点。它首先使用服务器的 IP 地址,计算其散列值并为其分配圆上的一个点(角度)。以下是如何为 3 个服务器 S1、S2、S3 计算角度的简单说明:
  将服务器分配给哈希环上的点
  此外,每个密钥都使用相同的哈希算法进行哈希处理并在服务器上分配一个点。对于每个散列键,我们按顺时针方向移动并找到最近的服务器并分配给它。
  将密钥分配给哈希环上的点
  我们得到以上密钥集的以下分配:
  将密钥分配给服务器
  以下是上述密钥分配到哈希环上不同服务器的图形表示:
  在哈希环上将密钥分配给服务器
  从上图可以看出,我们从每个键顺时针方向移动,找到它的服务器。 扩展和添加新服务器
  如前一节所述,我们首先计算服务器IP地址的哈希值并找到它在圆上的位置。例如:如果我们添加一个服务器S4,发现它位于圆上的S2和S0之间。此外,我们重新分配 S0 的键,其角度小于 S3,或者换句话说,在圆上出现在 S3 之前。
  下图说明了此过程,其中添加了一个新服务器 S3,它位于 S2 和 S0 之间。最初,键Mumbai被分配给服务器 S0。在添加 S3 时,我们看到从键Mumbai顺时针方向遇到的第一个服务器是 S3,因此我们将此键分配给 S3。
  添加新服务器 S3
  从上面可以看出,添加新服务器不会影响所有密钥。只有散列环上两个服务器之间出现的密钥需要重新分配。 删除现有服务器
  当删除现有服务器时,只需要重新分配属于该服务器的密钥。对于属于被移除服务器的key,按顺时针方向找到哈希环上的下一个服务器。此外,然后将密钥分配给新服务器。
  下图说明了删除现有服务器的过程:
  删除服务器 S1
  在上图中,删除了服务器 S1。键New York被分配给服务器 S1。删除 S1 后,我们从键New York中找到第一个服务器并找到服务器 S2。因此,键New York被重新分配给服务器 S2。
  与普通散列不同,删除服务器不需要重新散列所有密钥。只需重新分配已移除服务器的密钥。 虚拟节点
  我们看到,当一个节点被移除时,分配给这个节点的所有键都会被移动到哈希环中的下一个节点。通常,在删除一个节点时,数据分布会变得不均匀,并且其中一个节点的负载会增加。
  在上述情况下,如果我们从系统中删除 S0,则键London将映射到服务器 S2。最终,我们会发现 S2 处理三个密钥,而 S1 只管理一个密钥。因此,数据分布不均匀。
  删除 S0 会给 S2 带来更多负载
  在理想情况下,当有M个密钥和N个服务器时,每个服务器必须有接近 M/N 个密钥。因此,添加或删除节点会影响系统中的最大 M/N 键。为了确保接近理想的分布,我们在系统中引入了虚拟节点。每个物理节点在哈希环上都有多个虚拟节点。
  我们使用多个哈希函数来查找虚拟节点在哈希环上的位置。每个服务器都用 Sij 表示,其中 i 表示实际服务器编号,j 代表其虚拟副本。例如:对于第一台服务器,虚拟副本将是 S00、S01、S02、S03 等。我们使用不同的哈希函数来计算每个虚拟副本的哈希值。
  在上面的示例中,我们得到以下虚拟服务器分配:
  哈希环上的虚拟服务器
  从上图可以看出,服务器S1的虚拟副本是S10、S12和S13。这同样适用于服务器 S0。这导致节点之间的数据分布接近均匀。
  对于给定的密钥,如果哈希环中的下一个服务器是 S12,则它将分配给第一个物理服务器。一般而言,分配给虚拟服务器 Sij 的密钥将存储在物理服务器 Si 上。 总结
  本文带大家认识了一致性哈希算法,一致性哈希于 1997 年推出,它已经在许多分布式系统中的得到了应用。 Amazon 的 Dynamo DB 中使用它作分区组件。此外,Apache Cassandra 和 Voldermort 等开源应用程序使用它进行数据分区。
  欢迎关注个人公众号【JAVA旭阳】

塞布尔或离队?恩比德希望他留下他是最好的外线防守者之一直播吧2月9日讯今日NBA常规赛,76人在客场以99106不敌凯尔特人。赛后,恩比德接受了记者采访。谈到在交易截止日前塞布尔可能离队,他说道就我个人而言,我希望球队能拥有他。我认为世纪华通否认接盘暴雪中国区代理权并购暴雷176亿商誉悬顶全年预亏超60亿长江商报奔腾新闻记者汪静与网易分手后,暴雪中国区代理权迟迟未定,2月7日,有消息称暴雪中国代理权将由世纪华通(002602。SZ)接手,不过很快,世纪华通方面便否认了该传闻。值得注昆明之美,怎一个诗字了得?丽日游醉美昆明,作短诗一首,大家觉得咋样?文爱在田园一分醉。人间三月正芳菲,陌上花开叶初肥。溪边草嫩,沟坡玉翠,暮春风光美。二分醉。暖风无意催花垂,细雨有声漫野飞。青杨绿柳,锦鲤重勒布朗詹姆斯VS迈克尔乔丹,谁才是你心目中的GOAT?分享一则2016年的旧闻当时骑士刚刚拿到队史第一个总冠军,乔丹才同意推进拍摄自己的纪录片最后一舞。值得一提的是,早在1993年,乔丹和当时的公牛就授权一个团队进行相关素材的拍摄工作南青赛六强第二轮战报巴西获胜领跑,乌拉圭第二,哥伦比亚第三直播吧2月4日讯今天,南美U20锦标赛六强战第二轮的3场比赛落下帷幕,乌拉圭巴西和哥伦比亚分别取胜。乌拉圭21击败厄瓜多尔,厄瓜多尔的奥迪斯在第13分钟首开记录,法布里西奥迪亚兹在在欧文请求交易后,网队的总决赛赔率翻了一番,湖人的赔率提高了Oddsmakers立即对KyrieIrving要求布鲁克林网队进行交易的报道做出悲观反应。洛杉矶湖人队是交易截止日期前凯里欧文的主要追求者吗?周五早些时候,网队在BetMGM赢得北京冬奥钢架雪车试滑员张京剑指奥运是信念更是信仰张京(中)在北京冬奥会赛场上与同为试滑员的队友合影。受访者供图(新春走基层)北京冬奥钢架雪车试滑员张京剑指奥运是信念更是信仰中新网天津2月4日电题北京冬奥钢架雪车试滑员张京剑指奥运英超切尔西战平富勒姆2月3日,切尔西队球员恩佐费尔南德斯在比赛后。新华社路透当日,在20222023赛季英格兰足球超级联赛第22轮比赛中,切尔西队主场以0比0战平富勒姆队。2月3日,切尔西队主教练波特欧文负气申请交易!杜兰特表示失望,勇士有望重组超级球队!头条创作挑战赛篮网靠着杜兰特受伤前场均2965的全面表现,一度将球队带到东部前二,但由于杜兰特的受伤,篮网凭借着良好的战绩优势,在欧文的带领下,仅仅4胜7负,即便如此,他们依然取得动容扬古路不堕悄然机心内观心觅本心,心心俱绝见真心。世界上只有光是永恒的,世界上最大的秘密就是自己不了解自己。练得身形似鹤形,千株松下两函经。我来问道无余说,云在青天水在瓶!药山禅师告诫高高山顶立,深与春天的约会!文山市平坝镇举办首届油菜花美食节2月3日,文山壮族苗族自治州文山市平坝镇首届油菜花美食节拉开帷幕,花团锦簇,游客成群,油菜花田热闹非凡。本届油菜花美食节以春天春天,这里是平坝,听到请回答为主题,将乡土文化田园生态
乔丹普尔的迅速崛起勇士队经历统治王朝后,伴随着杜兰特出走,汤普森十字韧带撕裂后,经过了几个赛季的蛰伏,这赛季突然强势崛起,库里的表现当然毋庸置疑,不可否认库里的伟大,但对内年轻球员的崛起也是这个赛季新疆请等一下,我来了,第358回已过不惑之年,家有老小,而我心有不甘向往诗与远方,我能实现吗?2022。04。23,今天终于下定决心,去拍视频了,总要迈出那一步才行。驱车十多公里,来到北京奥林匹克公园北面的一处绿看了港圈太子爷的故事,才知道有钱真的可以为所欲为近日,娱乐圈纪检委王思聪手撕以岭药业,不得不让我们感叹,王校长一如既往地敢怼啊!作为曾经的首富之子,一向以来怼天怼地,上到央视新闻,下到娱乐圈各类明星,从不嘴软。香港也有这么一位太金i奖捷通华声武卫东荣获2021年度人物近日,由中国科学院旗下的权威媒体互联网周刊主办中国社会科学院信息化研究中心eNet研究院德本咨询联合举办的2022(第七届)思维实验室论坛上,捷通华声董事长兼总经理武卫东入选202优酷看片还要砍一刀,已被微信屏蔽,干得漂亮从VIP超前点播到每集3块钱解锁,从会员涨价到VVVIP,细数长视频平台这些年的骚操作,可谓是层出不穷。谁曾想,最近优酷又整出了一个新的套路好友助力。打开UC浏览器查看更多精彩图片油价调整新消息今天4月24号,调价后全国9295号汽油新限价今年国内油价的调整,让很多车主很是操心,总是盼望着能有所降价,但实际结果似乎和想象的不太一样。2022年直至目前为止,我们国内油价一共经历了7次调整。油价由年初的7。16元一升,在美股狂泻1000点,真替A股捏把汗A股连续暴跌两天之后,上周五,上证指数踉踉跄跄走了一天,收得一个红盘。股民们深吸了一口气,没有黑色五,终于可以不用关灯吃面了。关灯吃面什么意思呢?很多不炒股的读者,或者新股民,可能抖音上很火的句子,温暖治愈,激发自信心1无论是繁华还是苍凉,生活有太多的难题和烦恼,要适时调整自己,懂得取舍,该坚持的坚持,该放弃的放弃。2只要生机不灭,即使重遭天灾人祸,暂时被阻抑,终有抬头的日子。3可以孤单,但不许被科普书喂大的孩子,眼界更开阔,学理科更简单我家对门那小男孩,每天张嘴就是黑洞夸克摩擦力什么的,跟他聊天,什么都难不住他。他父母说就是从小看了好多科普书,这种知识储备大的孩子,虽然小学成绩不算拔尖,可是一旦上了初高中,数理化好难!还继续吗?回首人生几十载,发现除了婴幼儿时期是奶声奶气外,好像至今说话处事一直是生冷硬,基本都是正面刚,或者刚不过了能避就避前几天看了一个视频,突然就心血来潮的想换种活法,先不说撒娇了,害怕白洋淀之旅令人胆战心惊的小木船自驾云游季2019年的暑假,我们自驾去了趟白洋淀。去之前在网上查了攻略,望月岛有一些民宿,原计划到了以后住在望月岛,来个白洋淀深度游。白洋淀离石家庄不远,不到10点就到了,到了以后