一致哈希

✍ dations ◷ 2025-02-24 07:19:25 #Hashing

一致哈希 是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K / n {\displaystyle K/n} 个关键字重新映射,其中 K {\displaystyle K} 是关键字的数量, n {\displaystyle n} 是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。

一致哈希由MIT的Karger及其合作者提出,现在这一思想已经扩展到其它领域。在这篇1997年发表的学术论文中介绍了“一致哈希”如何应用于用户易变的分布式Web服务中。哈希表中的每一个代表分布式系统中一个节点,在系统添加或删除节点只需要移动 K / n {\displaystyle K/n} 项。

一致哈希也可用于实现健壮缓存来减少大型Web应用中系统部分失效带来的负面影响。

一致哈希的概念还被应用于分布式散列表(DHT)的设计。DHT使用一致哈希来划分分布式系统的节点。所有关键字都可以通过一个连接所有节点的覆盖网络高效地定位到某个节点。

在使用n台缓存服务器时,一种常用的负载均衡方式是,对资源o的请求使用 hash ( o ) = o mod n {\displaystyle {\mbox{hash}}(o)=o\mod n} 来映射到某一台缓存服务器。当增加或减少一台缓存服务器时这种方式可能会改变所有资源对应的hash值,也就是所有的缓存都失效了,这会使得缓存服务器大量集中地向原始内容服务器更新缓存。因此需要一致哈希算法来避免这样的问题。一致哈希尽可能使同一个资源映射到同一台缓存服务器。这种方式要求增加一台缓存服务器时,新的服务器尽量分担存储其他所有服务器的缓存资源。减少一台缓存服务器时,其他所有服务器也可以尽量分担存储它的缓存资源。一致哈希算法的主要思想是将每个缓存服务器与一个或多个哈希值域区间关联起来,其中区间边界通过计算缓存服务器对应的哈希值来决定。(定义区间的哈希函数不一定和计算缓存服务器哈希值的函数相同,但是两个函数的返回值的范围需要匹配。)如果一个缓存服务器被移除,则它所对应的区间会被并入到邻近的区间,其他的缓存服务器不需要任何改变。

一致哈希将每个对象映射到圆环边上的一个点,系统再将可用的节点机器映射到圆环的不同位置。查找某个对象对应的机器时,需要用一致哈希算法计算得到对象对应圆环边上位置,沿着圆环边上查找直到遇到某个节点机器,这台机器即为对象应该保存的位置。当删除一台节点机器时,这台机器上保存的所有对象都要移动到下一台机器。添加一台机器到圆环边上某个点时,这个点的下一台机器需要将这个节点前对应的对象移动到新机器上。更改对象在节点机器上的分布可以通过调整节点机器的位置来实现。

David Karger及其合作者列出了使得一致哈希在互联网分布式缓存中非常有用的几个特性:

在亚马逊的云存储系统Dynamo的数据划分功能模块中使用一致哈希。

相关

  • 罗马斗兽场坐标:41°53′25.02″N 12°29′32.62″E / 41.8902833°N 12.4923944°E / 41.8902833; 12.4923944罗马斗兽场(意大利语:Colosseo,英语:Colosseum,又译作罗马斗兽场、罗马大角斗
  • 头索动物亚门头索动物亚门是脊索动物门的一个亚门。头索动物的脊索延伸到背神经管的前方,故名。其咽鳃裂众多。头索动物一般称为文昌鱼,故又名狭心纲及文昌鱼纲。因无真正的头部,又称为无头
  • 惯性在物理学里,惯性(英语:inertia)是物体抗拒其运动状态被改变的性质。物体的惯性可以用其质量来衡量,质量越大,惯性也越大。艾萨克·牛顿在钜著《自然哲学的数学原理》里定义惯性为:
  • 人类 (消歧义)人类(英语:humanity,mankind,man,human beings或terran)可以指:英文中的humanity还可以指:
  • 精质物理学中,第五元素(英语:quintessence,又译作精质)是一种对于暗能量的假设形式,被提出来解释对于宇宙加速膨胀的观测。第五元素是一种标量场,其状态方程 (宇宙学)(将该物质之压力pq
  • 罗马尼亚电视台罗马尼亚电视台(罗马尼亚语:Televiziunea Română / TVR),或称罗马尼亚电视公司(Societatea Română de Televiziune / SRTV),是罗马尼亚的国家电视台,总部位于布加勒斯特。该电视
  • 右翼政党联盟右翼政党联盟(希伯来语:איחוד מפלגות הימין‬)是以色列右翼至极右翼宗教锡安主义政党的联盟,其中包括犹太人家园 、犹太力量(英语:Otzma_Yehudit)和民族联盟-重生(
  • 木兰镇 (阆中市)木兰乡,是中华人民共和国四川省南充市阆中市下辖的一个乡镇级行政单位。2019年10月,撤销河楼乡,将其所属行政区域划归木兰镇管辖。木兰乡下辖以下地区:花石村、菩提村、庙子岩村
  • 詹纽瑞·琼斯詹纽瑞·琼斯(英语:January Jones,1978年1月5日-)出生于美国南达科他州明尼哈哈县,美国著名女演员。在2007年的电视剧《广告狂人》中,饰演Betty Draper Francis而观众所熟知。1978
  • 符为霖符为霖(?-?),清朝政治人物。江西永丰县中村乡严溪鱼口坑人。符为霖为同治三年(1864年)甲子科举人,中式第一百廿六名。同治四年(1865年)乙丑科三甲进士,中式第十三名。同治六年(1867年)二月