一致性hash算法是分布式系统的实施中非常重要的一个算法,只是简单的使用hash算法在节点没有故障和不新增或删除节点时没有问题,但一旦涉及到节点的扩容或节点故障,往往会导致之前的大部分节点失效的问题,一致性hash能够解决这个问题,具体的算法介绍可以参考http://blog.csdn.net/sparkliang/article/details/5279393,此处讲解一个简单的一致性hash实现,这里的实现与淘宝的cobar中的实现基本一致。
一致性hash算法可以归结为两个步骤,第一步是计算hash值,第二步是查找真正的节点hash值,针对具体的应用可以这么实现,第一步计算hash值时使用v_value=hash(value)%VNODE_SIZE,第二步是范围匹配,比如VNODE_SIZE=1024,则可以指定0-511为node0,512-1023为node1,查找的时候使用位图的方式,即使用int map[VNODE_SIZE],此处map[0-511]存储的是node0的值,map[512-1023]存储的是node1的值,使用v_value作为数组下标即可以直接找到其实际节点值,实际是一种空间换时间的策略,实现起来也非常简单。这种实现在公司实现的分布式项目中采用了。