写点什么

第五课技术选型作业

用户头像
Geek_michael
关注
发布于: 2020 年 12 月 24 日

一致性Hash算法主要应用于分布式场景,通过引入Hash环及虚拟hash节点使hash分布更均匀,在节点变化(扩充或损坏)的情况下相比于普通hash算法在分布式情况下有较好的可扩展性和稳定性。以下为一致性hash算法使用python的简单实现。

import hashlib
class HashConsistency :
def _init__(self,noteList, noteCount ):
self._hashCircle = dict()
self._virtualNodeCount = noteCount
self._virtualNoteList = noteList
if noteList:
for note in notelist:
self.add_node(note)
def add_node(self,node):
for i in range(self._virtualNodeCount):
node_str = "%s %s" %(node,i)
key = self._gen_key(node_str)
self._hashCircle[key] = node
self._virtualNoteList.append(key)
self._virtualNoteList.sort()
def get_node(self,key_str):
if self._virtualNoteList:
key = self._gen_key(key_str)
for node_key in self._virtualNoteList:
if key <= node_key:
return self._hashCircle[node_key]
return self._hashCircle[self._virtualNoteList[0]]
else:
return None
def remove_node(self,node):
for i in range(self._virtualNodeCount):
node_str = "%s %s" % (node, i)
key = self._gen_key(node_str)
if key in self._hashCircle.keys():
del self._hashCircle[key]
self._virtualNoteList.remove(key)
return
@staticmethod
def _gen_key(key_str):
md5_str = hashlib.md5(key_str)
return long(md5_str,16)



用户头像

Geek_michael

关注

还未添加个人签名 2020.01.16 加入

还未添加个人简介

评论

发布
暂无评论
第五课技术选型作业