python一致性hash(一致性hash虚拟节点怎么理解)

1.一致性hash虚拟节点怎么理解

一致性哈希基本解决了在P2P环境中最为关键的问题——如何在动态的网络拓扑中分布存储和路由。每个节点仅需维护少量相邻节点的信息,并且在节点加入/退出系统时,仅有相关的少量节点参与到拓扑的维护中。所有这一切使得一致性哈希成为第一个实用的DHT算法。

但是一致性哈希的路由算法尚有不足之处。在查询过程中,查询消息要经过O(N)步(O(N)表示与N成正比关系,N代表系统内的节点总数)才能到达被查询的节点。不难想象,当系统规模非常大时,节点数量可能超过百万,这样的查询效率显然难以满足使用的需要。换个角度来看,即使用户能够忍受漫长的时延,查询过程中产生的大量消息也会给网络带来不必要的负荷。

英文解释

Consistent hashing is a scheme that provides hash table functionality in a way that the addition or removal of one slot does not significantly change the mapping of keys to slots.

2.一致性hash算法,采用哪种算法实现比较好,比如MD5,CRC32,或者

CRC全称为Cyclic Redundancy Check,又叫循环冗余校验。CRC是目前使用中最老的一种校验算法,CRC是种根据网络数据封包或电脑档案等数据产生简短固定位数校验码的一种散列函数(HASH,把任意长度的输入通过散列算法,最终变换成固定长度的摘要输出,其结果就是散列值,按照HASH算法,HASH具有单向性,不可逆性),主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。由于本函数易于用二进制的电脑硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。

正因为CRC具有以上特点,对于网络上传输的文件类很少只使用CRC作为校验依据,文件传输相比通信底层传输风险更大,很容易受到人为干预影响。

MD5全称为Message-Digest Algorithm 5,又叫摘要算法和哈希算法。

MD5由MD4、MD3、MD2改进而来,MD5散列长度通常是128位,是目前被大量广泛使用的散列算法之一,主要用于密码加密和文件校验等,虽然MD5比CRC的安全可靠性要高的多,但目前已经找到可行的破解方法。现在网上虽然出现有些破解网站和软件,不过可以肯定实际作用范围相当有限,比如,即使黑客拿到了PASSWORD MD5值,除了暴力破解,即使找到碰撞结果也未必能够影响用户安全问题,因为对于密码还要限定位数、类型等,但是如果是面向数字签名等应用,可能就会被破解掉。

SHA全称为Secure Hash Algorithm,又叫安全散列算法。SHA家族算法有SHA-1、SHA-224、SHA-256、SHA-384和SHA-512(后四者通常并称SHA2),原理和MD4、MD5相似。SHA可将一个最大2^64位(2305843009213693952字节)信息,转换成一串160位(20字节)的散列值(摘要信息),是目前应用最广的HASH算法。同MD5一样,从理论角度,SHA1也不是绝对可靠,目前也已经找到SHA1的碰撞条件,但“实用”的碰撞算法软件还没出现。于是美国NIST又开始使用SHA2,研究更新的加密算法。

补充:虽然目前这几种校验算法都找到了破解条件,但像目前主流使用的MD5、SHA1还是值得信赖的,因为MD5和SHA1都具有高度的离散性,哪怕是只修改一个字节值都会导致MD5或SHA1值“巨大”变化,从实践角度,不同信息具有相同MD5或SHA1码的可能性非常低,通常认为是不可能的,对于普通的下载文件或操作系统,想通过简单的修改某个字节或某些字节,又要保证文件名、大小和安装可靠性的前提下,想达到MD5、SHA1碰撞效果也几乎是不可能的。

3.一致性哈希的介绍

一致性哈希算知法在1997年由麻省理工学院提出(参见扩展阅读[1]),设计目标是为了解决因特网中的道热点(Hot spot)问题,初衷和内CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使容得DHT可以在P2P环境中真正得到应用。

python一致性hash

转载请注明出处编程代码网 » python一致性hash(一致性hash虚拟节点怎么理解)

资讯

python列表元素排序(Python中,如何给列表排序)

阅读(18)

本文主要为您介绍python列表元素排序,内容包括Python怎么对列表中元素排序,python对列表里的元素进行排序,python对列表里的元素进行排序。Python中给列表排序的方式有很多,可以自己实现知,也可以用Python提供的方法使用Python提供的方法:列表

资讯

Python打包exe(怎么将多个python打包成exe文件)

阅读(17)

本文主要为您介绍Python打包exe,内容包括怎么将多个python打包成exe文件,如何把python打包成exe,如何把python文件打包成exe。安装pywin32,可以参考《怎么给python安装pywin32模块?》,一定要注意对应的python版本,否则不能安装。

资讯

python两个列表交集(python怎么求两个列表的交集)

阅读(18)

本文主要为您介绍python两个列表交集,内容包括python怎么求两个列表的交集,python如何求嵌套列表的交集,python有没有两个列表取并集。方法1遍历b1,如果某个元素同时也存在于b2中,则返回复制代码代码如下:b1=[1,2,3]b2=[2,3,4]b3 = [val fo

资讯

pythonmain返回值类型(python怎么写main函数)

阅读(14)

本文主要为您介绍pythonmain返回值类型,内容包括python怎么写main函数,main返回值,python中,怎么让类返回值啊。print main当脚本作为执行脚本时__name__的值为__main__当脚本作为模块时__name__为模块文件名。main函数

资讯

python返回list最大值(python中list的大小最大是多少)

阅读(15)

本文主要为您介绍python返回list最大值,内容包括python中list的大小最大是多少,pythonlist返回表里数据最小值位置,python中list的大小最大是多少。一般应用场景都不用考虑这个大小,因为这个上限很高,需要用到这么多元素的list的时候,都需要考

资讯

python改为字符串(python怎么把列表转换成字符串)

阅读(19)

本文主要为您介绍python改为字符串,内容包括python怎么把列表转换成字符串,python怎么将转为字符串,在python中怎么对字符串变为一个个的字符串。完成这些数符转换,需要借助int(x)字符串转换工具,需要用到python编辑器,具体步骤如下:打开任意py

资讯

python3md5解密(如何使用Python3的两个库来加解密字符串)

阅读(47)

本文主要为您介绍python3md5解密,内容包括如何使用Python3的两个库来加解密字符串,python,求一个获取文件md5的算法,python,如何对文件内容进行md5处理。哈希如果需要用到安全哈希算法或是消息摘要算法,那么你可以使用标准库中的 hashlib 模

资讯

python能干什么知乎(java工程师一般用python做什么知乎)

阅读(51)

本文主要为您介绍python能干什么知乎,内容包括python可以做什么知乎,python可以做什么知乎,java工程师一般用python做什么知乎。#做网站后台Python在网站后台这边有大量的成熟的框架,如django,flask,bottle,tornado,我曾经用过flask

资讯

python处理中文字符串(Python3.5如何对中文字符串进行处理)

阅读(46)

本文主要为您介绍python处理中文字符串,内容包括Python3.5如何对中文字符串进行处理,请问python怎么可以很好的处理中文字符,python处理中文字符串用什么编码方式。在Python的string前面加上r, 是为了告诉编译器这个string是个raw string,不

资讯

python运行指定文件(如何用Python打开指定的某个文件夹)

阅读(50)

本文主要为您介绍python运行指定文件,内容包括如何用Python打开指定的某个文件夹比如我要用Python打开D盘里,python中,如何用指定的程序打开指定的文件,比如在windows下,用,怎么在Python进入指定文件夹。操作系统一般不允许程序直接操作磁

资讯

Python类虚函数(类中snip是什么python)

阅读(50)

本文主要为您介绍Python类虚函数,内容包括python怎样调用基类函数,python中的析构函数多继承时为什么只析构自己,对于父类不会被析构,python类中类方法和类实例有什么区别。snip 的英文原意是削减,剪去的意思。在Python 中,snip 就是代表省略

资讯

python列表元素排序(Python中,如何给列表排序)

阅读(18)

本文主要为您介绍python列表元素排序,内容包括Python怎么对列表中元素排序,python对列表里的元素进行排序,python对列表里的元素进行排序。Python中给列表排序的方式有很多,可以自己实现知,也可以用Python提供的方法使用Python提供的方法:列表

资讯

Python打包exe(怎么将多个python打包成exe文件)

阅读(17)

本文主要为您介绍Python打包exe,内容包括怎么将多个python打包成exe文件,如何把python打包成exe,如何把python文件打包成exe。安装pywin32,可以参考《怎么给python安装pywin32模块?》,一定要注意对应的python版本,否则不能安装。

资讯

python两个列表交集(python怎么求两个列表的交集)

阅读(18)

本文主要为您介绍python两个列表交集,内容包括python怎么求两个列表的交集,python如何求嵌套列表的交集,python有没有两个列表取并集。方法1遍历b1,如果某个元素同时也存在于b2中,则返回复制代码代码如下:b1=[1,2,3]b2=[2,3,4]b3 = [val fo

资讯

pythonmain返回值类型(python怎么写main函数)

阅读(14)

本文主要为您介绍pythonmain返回值类型,内容包括python怎么写main函数,main返回值,python中,怎么让类返回值啊。print main当脚本作为执行脚本时__name__的值为__main__当脚本作为模块时__name__为模块文件名。main函数

资讯

python返回list最大值(python中list的大小最大是多少)

阅读(15)

本文主要为您介绍python返回list最大值,内容包括python中list的大小最大是多少,pythonlist返回表里数据最小值位置,python中list的大小最大是多少。一般应用场景都不用考虑这个大小,因为这个上限很高,需要用到这么多元素的list的时候,都需要考

资讯

python改为字符串(python怎么把列表转换成字符串)

阅读(19)

本文主要为您介绍python改为字符串,内容包括python怎么把列表转换成字符串,python怎么将转为字符串,在python中怎么对字符串变为一个个的字符串。完成这些数符转换,需要借助int(x)字符串转换工具,需要用到python编辑器,具体步骤如下:打开任意py

资讯

python获取上层路径(python获取当前路径)

阅读(19)

本文主要为您介绍python获取上层路径,内容包括求大神指导:python怎样读取深层次路径下文件的完整路径,python如何获取文件夹下第一层文件的路径,,python获取当前路径。除了os.getcwd()这个方法,还可以通过os.path.abspath(.)的方法获取当前路径