Jump Consistent Hash是一个来自Google的快速, 几乎没有内存消耗的一致性哈希算法. 这篇文章是我的翻译和理解思路.哈希算法的设计目标平衡性, 把对象均匀地分布在所有桶(bucket)中.单调性, 当桶的数量变化时, 只需要把一些对象从旧桶移动到新桶, 不需要做其它(例如旧桶之间的)移动.比如一个分布式存储的系统, 按哈希分布带来优化的便利, 平衡性可以避免数据倾斜, 单调性则使得扩容和减容更快速.算法的设计思路我们用循序渐进的思路来设计,ch(key, num_buckets)为桶数为num_buckets时的hash函数, 为了满足设计目标, 需要:num_buckets为1时, 任意key,ch(key, 1)==0, 全落在第0个桶里.num_buckets由1变为2后,ch(key, 2)应该有1/2的结果保持为0, 有1/2变为1.…num_buckets由n变为n+1后,ch(key, n+1)应该有n/(n+1)的结果保持不变, 有1/(n+1)跳变为n+1.因此, 只要我们用一个分布均匀的函数, 例如伪随机数生成器, 并且让这个伪随机数生成器的状态只依赖于key, 从0个桶开始推导, 变到第num_buckets个桶, 结果就是我们想要的hash值:int ch(int key, int num_buckets) {
random.s
...
继续阅读
(36)