EllWu

工作和生活需要平衡。

一致性Hash算法

from wikipedia 一致哈希

 

历史

1997年由MIT的Karger等在一篇学术论文中提出如何将“一致性Hash”应用于用户易变的分布式Web服务中。也可用于实现健壮缓存来减少大型Web应用中系统部分失效带来的负面影响。

该概念还被应用于DHT(分布式散列表)的设计。

 

需求

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

 

实现

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

 

特性

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

  • 冗余少
  • 负载均衡
  • 过渡平滑
  • 存储均衡
  • 关键词单调

 

posted on 2015-02-12 10:45  EllWu  阅读(122)  评论(0)    收藏  举报

导航