一致性哈希看这篇就够了!【转】

既然有一致性哈希,就肯定还有不一致哈希,为啥平时没人说不一致哈希呢?因为常见的哈希都是不一致的,所以就不修饰了,到了一致性哈希才特殊加个描述词修饰一下。

哈希一般都是将一个大数字取模然后分散到不同的桶里,假设我们只有两个桶,有 2、3、4、5 四个数字,那么模 2 分桶的结果就是:

在这个跳转表中,每个桶记录距离自己 1,2,4 距离的数字所存的桶,这样不管查询落在哪个节点上,对整个哈希环上任意的查询一次都可以至少跳过一半的查询空间,这样递归下去很快就可以定位到数据是存在哪个桶上。

当然这写都只是一致性哈希实现方式中的一种,还有很多实现上的变体。比如选择数字放在哪个桶,上面的介绍里是选择顺着数字下去出现的第一个桶,其实也可以选择距离这个数字最近的桶,这样实现和后面的跳转表规则也会有变化。同样跳转表也有多种不同的算法实现,感兴趣的可以去看一下 CAN,Chord,Tapestry,Pastry 这四种 DHT 的实现,有意思的是它们都是 2001 年发出来的 paper,所以 2001 年大概是 P2P 下载的元年吧。

(0)

相关推荐