第 5 周作业

用户头像
paul
关注
发布于: 2020 年 10 月 26 日

内容总结

作业(2选1)



  1. 用你熟悉的编程语言实现一致性 hash 算法。

  2. 编写测试用例测试这个算法,测试 100 万 KV 数据,10 个服务器节点的情况下,计算这些 KV 数据在服务器上分布数量的标准差,以评估算法的存储负载不均衡性。



import md5
class 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)



用户头像

paul

关注

还未添加个人签名 2018.08.22 加入

还未添加个人简介

评论

发布
暂无评论
第5周作业