基本概念
一致性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