golang 实现基于虚拟节点的一致性 hash 算法
问题:实现一个基于虚拟节点的一致性hash cache集群,共10个节点。存放100万个KV, 计算数据分布情况。
解决方案:
三个关键问题:
如何给10个节点(每个节点对应N个虚拟节点)找到对应的槽位;
如何快速定位用户key对应的节点cache实例;
如何判断数据分布情况;
如何给10个节点(每个节点对应N个虚拟节点)找到对应的槽位;
对每个节点在2^(32-1)上hash出N个数字,对应的数字代表占有的槽位;
同时将所有已经占用的槽位放到map中,方便快速获取cache实例;
如何快速定位用户key对应的节点cache实例;
每个用户key用同样的方法去做hash, 得到一个数userKey;
遍历已经占有的槽位, 寻找最小的大于等于userKey的数字;
如何判断数据分布情况;
计算标准差;
关键数据结构:
版权声明: 本文为 InfoQ 作者【朱月俊】的原创文章。
原文链接:【http://xie.infoq.cn/article/308933c5154458bae27522ba3】。文章转载请联系作者。
评论