第 5 周作业
发布于: 2020 年 10 月 26 日
内容总结
作业(2选1)
用你熟悉的编程语言实现一致性 hash 算法。
编写测试用例测试这个算法,测试 100 万 KV 数据,10 个服务器节点的情况下,计算这些 KV 数据在服务器上分布数量的标准差,以评估算法的存储负载不均衡性。
import md5class ConsistentHashing(object): def __init__(self, nodes=None, split_cnt=100): self._split_cnt = split_cnt self._vnode_map_node = dict() self._vnodes = [] if nodes: for node in nodes: self.add_node(node) def add_node(self, node): for i in xrange(0, self._split_cnt): vnode = self.gen_vnode_key(node, i) self._vnode_map_node[vnode] = node self._vnodes.append(vnode) self._vnodes.sort() def remove_node(self, node): for i in xrange(0, self._split_cnt): vnode = self.gen_vnode_key(node, i) del self._vnode_map_node[vnode] self._vnodes.remove(vnode) def get_node_by_key(self, key): if not self._vnode_map_node: return None key_hash = self.gen_key(key) vnodes = self._vnodes vnodes_cnt = len(vnodes) for i in xrange(0, vnodes_cnt): vnode = vnodes[i] if key_hash <= vnode: return self._vnode_map_node[vnode] return self._vnode_map_node[vnodes[0]] def gen_vnode_key(self, node, vnode): key = '%s-%s' % (node, vnode) return self.gen_key(key) def gen_key(self, key): m_key = md5().update(key) return long(m_key.hexdigest(), 16)
划线
评论
复制
发布于: 2020 年 10 月 26 日 阅读数: 11
paul
关注
还未添加个人签名 2018.08.22 加入
还未添加个人简介
评论