【第五周】课后作业
发布于: 2020 年 10 月 25 日
用你熟悉的编程语言实现一致性 hash 算法。
编写测试用例测试这个算法,测试 100 万 KV 数据,10 个服务器节点的情况下,计算这些 KV 数据在服务器上分布数量的标准差,以评估算法的存储负载不均衡性。(暂时没做)
# coding by python3class HashRing(object): def __init__(self, nodes=None, replicas=1): """hash环 """ self.replicas = replicas self.ring = dict() self._sorted_keys = [] if nodes: for node in nodes: self.add_node(node) def add_node(self, node): """加节点入环 """ for i in range(0, self.replicas): key = self.get_key('%s:%s' % (node, i)) self.ring[key] = node self._sorted_keys.append(key) self._sorted_keys.sort() def remove_node(self, node): """移除节点 """ for i in range(0, self.replicas): key = self.get_key('%s:%s' % (node, i)) if key in self.ring: del self.ring[key] self._sorted_keys.remove(key) def get_node(self, string_key): """根据key获取节点 """ return self.get_node_pos(string_key)[0] def get_node_pos(self, string_key): """获取节点位置 """ if not self.ring: return None, None key = self.get_key(string_key) nodes = self._sorted_keys for i in range(0, len(nodes)): node = nodes[i] if key <= node: return self.ring[node], i return self.ring[nodes[0]], 0 def get_key(self, key): from hashlib import md5 key = key.encode(encoding='utf-8') m = md5() m.update(key) return m.hexdigest()
划线
评论
复制
发布于: 2020 年 10 月 25 日 阅读数: 9
云龙
关注
还未添加个人签名 2018.03.30 加入
还未添加个人简介
评论