一致性hash

Posted trigger3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一致性hash相关的知识,希望对你有一定的参考价值。

基本概念

一致性hash又名DHT(分布式hash表)、chord环算法。其主要解决常见分布式缓存的单调性,和平衡性。

所谓单调性,个人理解为增加或删除一个缓存节点时,不会导致整个缓存资源的重定向,只是将部分资源重定向到新的cache中。
而平衡性是指资源能够均匀滴分布在cache节点上,每个cache节点负载压力相同。

常见的hash算法弊端。

常用的hash算法hash(obj)/N,这种对于N过于敏感。如果N增大或者减小,就带来所有资源hash的重定向。而实际的分布式集群管理系统中,对机器的增加或者机器故障后的自动脱离是其基本功能。

基本算法

将每一个cache服务器节点映射到一个环上。顺时针方向,每一个服务器节点负责一个环区间,当对资源进行hash时,落在此区间的话,即存储在顺时针方向上的第一个服务器节点上。这样设计,在增加一个节点或者删除一个节点时,只会导致部分环区间改变,也就只引起部分资源hash的重定向。上诉即解决了单调性。

在解决平衡性上,一致性哈希引入了虚拟节点。
当环上服务器过少,则服务器分布不均匀,则负责环区间要大的节点,负载必然会更大。但是如果再用多个hash对服务器进行hash,相当于增加了环上服务器节点的个数。此时就能实现资源的均匀分布。

参考:
http://blog.csdn.net/cywosp/article/details/23397179
http://blog.codinglabs.org/articles/consistent-hashing.html

以上是关于一致性hash的主要内容,如果未能解决你的问题,请参考以下文章

图解一致性hash算法和实现

如何反转 Hash.inspect 或 Array.inspect? (又名 .to_s)在 Ruby 中

hash算法搜索获得api函数地址的实现

nginx 负载均衡之一致性hash,普通hash

hash算法与一致性hash

算法 一致性hash/hash环