1. P2P的特点是什么 2. 基于DHT的Chord圈型卡环的组成原理是什么

算法是P2P中的四大算法之中的一个是有MIT(麻省理工学院)于2001年提出,其它三大算法各自是:

Chord的目的是提供一种能在P2P网络高速定位资源的的算法Cord并不关心资源是怎样存储嘚,仅仅是从算法层面研究资源的取得因此Chord的API就简单到仅仅有一个set、get。

Chord是一个算法也是一个协议。作为一个算法Chord能够从数学的角度嚴格证明其正确性和收敛性;作为一个协议,Chord具体定义了每一个环节的消息类型当然,Chord之所以受追捧另一个主要原因就是Chord足够简单,3000荇的代码就足以实现一个完整的Chord

Chord还能够被作为一个一致性哈希、分布式哈希(DHT)的实现。

是指这样一种网络:构建在其它网络之上、网絡节点之间通过虚拟或逻辑连接在一起比方云计算、分布式系统都是覆盖网络,由于其都构建于TCP/IP之上且节点之间有联系。Chord也是构建于覆盖网络

3、结构化与非结构化网络

非结构化的P2P网络是指网络节点之间不存在组织关系,节点之间全然是对等的比方第一代P2P网络Napster,这类網络结构清晰、简单但查找没有多大的优化余地,常常採用全局或分区泛洪查找查找时间长、且结果难以保证(有可能在找到前就超時)。

结构化的P2P网络与非结构化恰好相反我们觉得网络在逻辑上存在一个人为设计的结构,比方Chord假定网络是一个环Kadelima则假定为一颗二叉樹,全部的节点均为树的叶子节点有了这些逻辑结构,就给我们资源查找引入了很多其它的算法和思路

4、分布式哈希表(DHT)

的主要想法是把网络上资源的存取像Hashtable一样,能够简单而高速地进行put、get该思想的诞生主要是受第一代P2P(Napster)网络的影响。与一致性哈希相比DHT更强调嘚是资源的存取,而无论资源是否是一致性的与一致性哈希同样的是,DHT也仅仅是一个概念详细细节留给各实现。

当前这些P2P实现能够被莋为DHT的详细实现再次再列举一些有代表性的实现:

Chord通过把Node和Key映射到同样的空间而保证一致性哈希,为了保证哈希的非反复性Chord选择SHA-1作为囧希函数,SHA-1会产生一个2160的空间每项为一个16字节(160bit)的大整数。我们能够觉得这些整数首尾相连形成一个环称之为Chord环。整数在Chord环上按大尛顺时针排列Node(机器的IP地址和Port)与Key(资源标识)都被哈希到Chord环上,这样我们就假定了整个P2P网络的状态为一个虚拟的环因此我们说Chord是结構化的P2P网络。

  • 我们称Chord环上的每一个节点为标志符
  • 假设某个Node映射到了某个标志符则继续称该标准符为Node
  • 按顺时针,节点前面的成为前继(predecessor),节点後面的成为后继(successor);同理第一个predecessor称之为直接前继,第一个successor称之为直接后继

红色点为Node蓝色为标志符。上面仅仅是部分节点和标志符以節点N1为例说明其Finger表中的successor:

把Node和Key都映射到一个值域感觉是把狗和猫放在一起衡量,尽管有点怪但这样能够保证一致性哈希,详细能够參考湔文

非常显然,分布在Chord环上的Node数远远小于标志符数(2160是一个无法衡量的天文数字)这样Chord环上的Node就会非常稀疏地分布在Chord环上,理论上应該是随机分布但如前面一致性哈希的讨论,假设节点数量不多分布肯定是不均匀的,能够考虑添加虚拟节点来添加其平衡性假设在節点较多(比方大型的P2P网络有上百万的机器)就不必引入虚拟节点。

非常显然不论什么查找仅仅要沿Chord环一圈结果肯定能够找到,这种时間复杂度是O(N)N为网络节点数,但对一个上百万节点且节点常常增加、退出的P2P网络来说,O(N)是不可忍受的因此Chord提出了以下非线性查找的算法:

  1. 每一个节点都维护一个predecessor和successor列表,该列表的作用是能高速定位前继和后继并能周期性检測前继和后继的健康状态
  2. 就是说存放的successor是按2的倍数等比递增,自所以取模是由于最后的节点的successor是開始的几个节点比方最大的一个节点的下一个节点定义为第一个节点
  3. 给定一个Key,按以丅的步骤查找其相应的资源位于哪个节点也就是查找该Key的successor:(假如查找是在节点n上进行)
  • 查看Key的哈希是否落在节点n和其直接successor之间,若是結束查找n的successor即为所找
  • 继续上述过程,直至找到Key相应的节点

从直觉上来说上次查找过程应该是指数收敛的,相似二分法的查找收敛速喥应该是非常快的;反过来,查找时间或路由复杂度应该是对数即的在以下我们会证明这一点。

下图表明了节点N1查找节点N53的过程还是佷快的:

对一个算法而言,收敛性是至关重要的假设没有收敛性做保证,在程序上化再多的心思也是徒劳在证明之前,我们再强调3点:

  • 查找是依据近期原则当前节点没有存放Key则从Finger表中寻找与hash(Key)距离近期的Node继续这个过程

这里要区分是Key的successor还是节点n的successor,同一时候要注意近期匹配原则

假如节点n的Finger表中的第i个successor与Key的距离近期,则满足:Key处在第i项与第i+1项中间

也就是说J与Key的距离小于n与Key的距离,而且该距离小于n与Key距离嘚一半这样我们保证每次迭代,与Key的距离都会收敛而且至少按2的指数收敛,也就是折半查找

至此,我们理论证明了Chord的收敛性

事实仩Chord算法能够全然转换为一个数学问题:

在Chord环上随意标记个点作为Node集合,随意指定Node T从随意的Node N開始依据Chord查找算法都能找到节点T。

为什么能这麼转换呢由于仅仅要找到了Key的直接前继,也就算找到了Key全部问题转化为一个在Chord环上通过Node找Node的问题。这样这个题就立即变的非常奇妙,假如我们把查找的步骤记录为路径又转化为随意2个节点之间存在一条最短路径,而Chord算法事实上就是构造了这样一条最短路径那这种蕗径会不会不存在呢?不会的由于Chord本身是一个环,最差情况能够通过线性查找保证其收敛性

从最短路径的角度来看,Chord仅仅是对已存在線性路径的改进依据这个思路,我们全然能够设计出其它的最短路径算法从算法本来来看,保证算法收敛或正确性的前提是每一个Node要囸确地维护其后继节点但在一个大型的P2P网络中,会有节点的频繁增加、退出假设没有额外的工作,非常难保证每一个节点有正确的后繼

所谓冗余性是指Chord的Finger表中存在无用项,那些处在Node N和其successor之间的项均无意义由于这些项所代表的successor不存在。比方在N1的Finger表中的第1~5项均不存在故都指向了N18,至少第1~4项为冗余信息

一般说来,假如Chord圈型卡环的组成大小为2m节点数为2n,假如节点平均分布在Chord环上则任一节点N的Finger表Φ的第i项为冗余的条件为:N+2i-1<N

>>n,所以Chord会存在非常多的冗余信息。假如网络上有1024个节点,即n=10,则冗余度为:1-(10-1)/16094%所以非常多论文都指出这一点,并覺得会造成冗余查询减少性能。事实上不然由于这些冗余信息是分布在多个Node的Finger表,假设採取适当的路由算法对路由计算不会有不论什么影响。

至此我们已经完整地讨论了Chord算法及其核心思想,接下来要讨论的是Chord的详细实施

基于分布式散列表P2P广播算法的失效性分析与改进

大连理工大学软件学院辽宁大连(116023)

摘要:P2P技术是目前网络研究的热点之一。在传统的网络系统中多依靠中心服务器结點对网络进行管理在这种情况下如果中心服务器失效就会对网络产生毁灭性的影响。基于分布式散列表的P2P模型具有广播效率高的特性目前的分布式散列表中将网络中将结点组成一定的数据结构,由于网络中结点的退出会对这种数据结构产生重大的影响本文改进了分布式散列表算法的广播模型使其在结点失效的环境下,具有较高的传输效率

关键词:P2P,分布式散列表失效分析

近年来P2P技术成为网络研究嘚热点之一。P2P技术可简单地定义为通过直接交换共享计算机资源和服务对等的含义即网络中的各台计算机(即对等点)在网络中处在同等的哋位,各自拥有独立的网络自主权其实质在于引导网络计算模式从中心走向分散,充分利用终端设备的处理能力减少甚至消除对类似Web垺务那样集中存储方式的应用需求。

Topology)目前国内外的研究主要几种在对后三种模型的性能改进。其中分布式散列表起源于SDDS (Scalable Distribute Data Structures)[1]研究Gribble等实現了一个高度可扩展,容错的SDDS 集群[2]DHT类结构能够自适应节点的动态加入/退出,有着良好的可扩展性、鲁棒性、节点ID分配的均匀性和自组织能力

本文结合网格服务资源发现系统的特点选择了全分布式非结构拓扑结构以及全分布结构化拓扑结构加以改进、完善并作为系统原型框架。

在基于分布式散列表的全分布结构化拓扑结构的模型中Chord模型是最具有代表性的一个Chord [3]项目诞生于美国的麻省理工学院。它的目标是提供一个适合于P2P环境的分布式资源发现服务它通过使用DHT技术使得发现指定对象只需要维护O(lgN)长度的路由表。在DHT技术中网络节点按照一定嘚方式分配一个唯一节点标识符(Node ID) ,资源对象通过散列运算产生一个唯一的资源标识符(Object ID) 且该资源将存储在节点ID与之相等或者相近的节点上。需要查找该资源时采用同样的方法可定位到存储该资源的节点。因此Chord的主要贡献是提出了一个分布式查找协议,该协议可将指定的關键字(Key) 映射到对应的节点(Node) 从算法来看,Chord是相容散列算法的变体[4]其将P2P网络中的结点组成动态的树形结构,并通过对逻辑树的遍历来完成網络中广播消息的发送

C hord模型中消息广播方式如图1所示:

参考资料

 

随机推荐