通过了解一致性hash原理,这篇文章就够了,可以了解一致性哈希算法的原理,下面就通过一个小案例来事件一下。
背景
假设有个系统,用户量非常大,需要针对不同用户访问不同的ip地址进行分流,且要求同一个用户多次访问均为同一个ip。
这种场景就是典型的哈希一致性问题,下面就通过模仿dubbo的ConsistentHashLoadBalance,来尝试来实现一下。
原理回顾
要用一致性哈希算法实现上述需求,需要经过如下几个步骤:
- 构建一个哈希环
- 将ip地址均匀的映射到哈希环上
- 将用户请求映射到哈希环上,从而定位相应的访问IP
难点分析
主要的难点在于找到合适的hash算法,hash算法不好,会影响元素的散列程度,这里就直接使用dubbo中的hash算法。
private long hash(byte[] digest, int number) {
return (((long) (digest[3 + number * 4] & 0xFF) << 24)
| ((long) (digest[2 + number * 4] & 0xFF) << 16)
| ((long) (digest[1 + number * 4] & 0xFF) << 8)
| (digest[number * 4] & 0xFF))
& 0xFFFFFFFFL;
}
构建hash环
java中可以使用TreeMap来构建哈希环
private static TreeMap<Long, String> virtualInvokers = new TreeMap<Long, String>();
将 ip地址映射到哈希环上
由于是本地实验,就直接在

最低0.47元/天 解锁文章
1874

被折叠的 条评论
为什么被折叠?



