很晚了,一致性hash的理论不再多说,直接上我写的c++代码
代码功能:
1,初始化一些实际的server节点,每个server节点生成一堆虚拟节点
2,将所有的虚拟节点根据它的名字生成的hash key散布到一个环内
3,对新插入环内的元素(随机生成),计算它的hash key,然后在环中寻找大于等于它的虚拟节点,根据虚拟节点即可找到物理节点。随机生成很多歌元素,查看散布到各个节点的元素数量是否均衡。
代码一些特点:
对于server节点,只需要存储它的虚拟节点hash值以及与实际server名字的对应。对于新插入的元素,为了快速找到它所存放的位置(即大于等于它的hash值的虚拟节点),应该采用二分查找。 故而,虚拟节点使用map结构存储,底层是红黑树的实现,类似于二分,同时支持高效的插入删除。 当新的虚拟节点插入到环内,只需要移动很少量的元素到它上面。
还有chord算法要好好看看,还没有看。
#include<iostream>
#include <sstream>
#include <string>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <random>