完整版基于DHT的分布式文件系统毕业设计.docx
《完整版基于DHT的分布式文件系统毕业设计.docx》由会员分享,可在线阅读,更多相关《完整版基于DHT的分布式文件系统毕业设计.docx(22页珍藏版)》请在冰点文库上搜索。
完整版基于DHT的分布式文件系统毕业设计
学号:
本科毕业论文
专业计算机科学与技术
年级2007级
姓名王京
论文题目基于DHT的分布式文件系统
指导教师杨军职称讲师
2011年5月18日
1绪论2
1.1分布式系统的定义3
1.2目标5
1.2.1让用户连接到资源6
1.2.2透明性6
1.2.3开放性7
1.2.4可扩展性8
1.3分布式文件系统8
1.3.1SUN网络文件系统9
1.3.2不同分布式文件系统对比12
2P2P技术13
2.1P2P技术13
2.1.1P2P的背景与发展13
2.1.2.p2p技术的分类14
2.1.3.p2p的特性20
3基于DHT的Chord算法的改进31
3.1影响搜索算法性能的因素31
3.3.6Nchord搜索算法的步骤41
基于DHT的分布式文件系统研究
信阳师范学院华锐学院数计系计算机科学与技术专业
指导教师:
杨军职称:
讲师
摘要:
随着信息时代的飞速发展,人们日益发现单个计算机的能力很是有限,于是自然而然想到把各个地方的计算机联合起来处理信息,这就是分布式的提出,随即涉及到资源共享的问题,这就是我们研究的分布式文件系统,随着P2P(即Peer-to-Peer)技术的发展,很好的解决了分布式存储与计算方面的问题,它作为一种全新的互联网技术,将传统的以服务器为中心的互联网应用模式提升为以用户为中心的对等模式。
P2P在文件交换,对等计算,协同工作,搜索服务等方面都有着重要的应用。
P2P文件交换系统的发展也由最初Npaster的完全中心化模型,Gnula的完全非中心化模型,发展到现在的BitTorrnet、eMuleeDoknye、KZaza等混合模型。
随着近年来DHT(DisrtibutedHashTable)技术的不断发展,DHT在p2p文件交换系统中扮演着越来越重要的角色,Kdamelai作为覆盖网络被广泛使用到P2P文件交换系统中。
P2P网络通常使用DHT作为其路由表,比较典型的算法有Chord、CAN、Kademlia、Tapestry、Pastry等,这些算法不仅可靠性高,容错性强,而且查找的效率非常高,查找算法的复杂度基本上都是O(LogN),被广泛地应用于各种各样的分布式系统中。
本文将比较分析以上各算法的原理和差异,重点分析、研究和改进Chord算法,减少路由跳数和系统开支。
关键词:
分布式;分布式文件系统;p2p;DHT;Chord
Abstract:
Withtherapiddevelopmentofinformationera,Peopleincreasinglyfindasinglecomputerabilityisverylimited,Naturallytheytemptedtoconnectwithcomputersineveryregiontoprocessinginformation,thusthedistributedproposed,butthencomestheresourcesharingproblem,that’stheDistributedFileSystemModletocentralizeduserPeertoPeerModle.P2PisimportantinData-Exchange,Peer-to-PeerComputing,CoordinatedWorking,SearchService,etc,InP2Pfile-sharingsystems,itisdevelopingfromthebeginningcentralizedmodelNapsteranddecentralizedmodelGnulatothecurrentmixedmodle,suchasBitTorrent,eMule,Kazza,etc.AstheDHT(DistritutedHashTable)technologydevelops,itplaysamoreimportantroleinP2Pfile-sharingsystem,KademliaisusedwidelyinP2Pfile-sharingsystemasanoverlaynetwork.DistributedarchitectureofthenetworkiscommonlyusedtobuildP2PnetworksusingDHTalgorithm,forinstance,Chord,
CAN,Kademlia,Tapestry,Pastry,etc.Thesealgorithmsnotonlypossessavarietyofdistributedstoragesystems.ThispaperstudyandcomparetheprinciplesanddifferencesofaboveDHTalgorithms,research、analysisandpromotetheChordalgorithmmorein-depth.thusdecreasingthejumpnumbersduringtheprocessofsearchingandthecostofsystem.
Keywords:
distributed;distributedfilesystem;p2p;DHT;Chord
1.绪论
计算机系统正在经历一场革命。
1945年是现代计算机时代的开始。
从那时起一直到1985年,计算机一直是庞大笨重而昂贵的。
即便是小型机每台也要上万美元,因而大多数机构都只有很少的几台计算机。
而且由于没有把这些计算机连接起来的手段,所以只能单独的使用它们。
然而,从20世纪80年代中期开始,技术领域中两方面的进步开始使这种局面有所改观。
第一项进步是高性能处理器的开发。
起初这些机器是8位机,但是很快16位、32位乃至64位的cpu纷至沓来,得到了普及。
很多使用这些cpu的机器的计算性能都可以与大型机相媲美,而价格却比大型机便宜得多。
近半个世纪以来,在计算机技术改进方面所取得的成果数量之多对于其他工业来说是完全无法想象的。
一台计算机的价格从1亿美元下降到了1000美元,而运算速度却从每秒一条指令提升到每秒1千万条指令,性能价格比提升了大约1012倍。
如果汽车的性能价格比在同一时期以同样的速率是提升,那么一辆“劳斯来斯”牌轿车现在只值1美元,而且每消耗1加仑(1加仑=4.5461升)汽油可以行驶10亿英里(1英里=1.6093公里)。
(不幸的是如果果真如此,光是说明如何打开车门这件事,就可能在用户手册中占用长达200页得篇幅。
)
第二项进步是高速计算机网络的发明。
利用局域网技术可以将位于同一建筑物里的数百台计算机连接起来。
使用这种连接方式可以在几us内将少量数据从一台机器传输到另一台机器。
如果要传输大量的数据,传输数率可以达到10~1000Mbs。
利用广域网技术可以连接全球范围内数百万台机器,机器间的数据传输速率从64Kbs到若干Gbs不等。
现在,由于有以上这些技术可供使用,因此把若干由大量计算机组成的计算机系统彼此通过高速网络相连接,不但是可行的,而且是很容易实现的。
这种系统一般称为计算机网络或分布式系统,以突出其与传统的集中式系统(centralizedsystem,也称为单处理器系统,singleprocessorsystem)的差异。
传统的集中式系统一般由单个计算机及其外围设备构成,也可以包含一些远程终端。
1.1分布式系统的定义
已经有很多文献给出了分布式系统的定义,但是不同文献给出的定义彼此不尽相同,而且没有一种令人满意。
考虑到本文的目标,我们只给出一个粗略的描述:
分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。
这个定义包含了两方面的内容。
第一方面是关于硬件的:
机器本身是独立的,第二个方面是关于软件的:
对用户来说他们就像在与单个系统打交道。
这两个方面共同阐明了分布式系统的本质,缺一不可。
我们先介绍关于软硬件的一些背景材料,与继续探讨分布式系统的定义相比,把注意力集中在分布式系统的重要特性上可能更好一些。
其重要特性之一是,各种计算机之间的差别以及计算机之间的通信方式的差别对用户是隐藏的。
同样,用户也看不到分布式系统的内部组织结构。
另一重要特性是,用户和应用程序无论在何时何地都能够以一种一致的统一的方式与分布式系统进行交互。
分布式系统的扩展或者升级应该是相对比较容易的[1]。
这一特性是由于下述原因:
1、分布式系统由独立的计算机组成,但同时隐藏了其中单个计算机在系统里所承担任务的细节。
2、即使分布式系统中某些部分可能暂时发生故障,但其整体在通常情况下总是保持可用。
3、用户和应用程序不会察觉到那些部分正在进行替换和维修,以及加入了哪些新的部分来为更多的用户和应用程序提供服务。
为了使种类各异的计算机和网络都呈现为单个的系统,分布式系统常常通过一个“中件层”组织起来,该“软件层”在逻辑上位于由用户和应用程序组成的高层与由操作系统组成的底层之间,如图1.1所示。
这样的分布式系统有时又称为中间件(middleware)。
图1.1作为中间件组织的分布式系统(请注意,中间件层延伸到了多台机器上)
现在我们考察一下分布式系统的几个例子。
第一个例子是位于一所大学或者某个公司部门的工作站网络。
该系统除了包括每个用户自己的工作站以外,还应该包括机房内的一个处理器池。
这些处理器并不分配给特定的用户,而是根据需要进行动态调配,这样的系统可能包含一个单一的文件系统,允许所有的机器通过相同的方法并且使用相同的路径名来访问所有的文件。
并且,当用户键入一个命令的时候,系统将寻找执行该命令的最佳位置,也许会在自己的工作站上直接执行该命令,也可能会在别人的一个空闲的工作站上执行,还有可能有机房中某个尚未分配的处理器执行。
如果系统整体外观和行为与传统的单处理器分时系统(即多用户系统)相似,那么这个系统就可以看做是分布式系统。
第二个例子是某个工作流信息系统,该系统支持对账单的自动的处理。
一般情况下,会有来自多个不同部门的人员在不同的地点使用这样的系统。
例如,销售部的人员可能遍布在很大的一个区域,甚至全国。
可以通过电话网络(或者蜂窝电话)连接到系统的膝上型计算机下达订单。
收到的订单由系统自动传送到计划部,接着新的内部调货订单就会送达仓储部,同时有财务部处理账单。
该系统自动将订单传送到相关人员手中。
用户根本就看不到系统中订单处理的物理流程;对于用户来说,这些订单像是由一个集中式数据库处理的一样。
最后一个例子是万维网。
它提供了一种简单、一致并且统一的分布式文档模型。
要查看某个文档,用户只须激活一个引用(即链接),文档就会显示在屏幕上。
理论上(但目前在实际中并不是这样)并不需要知道该文档来自于哪个服务器,更用不着关心服务器所在的位置。
要发布一个文档也很简单:
只需要赋予它一个唯一的URL名,让该URL指向包含文档内容的本地文件即可。
如果万维网向用户呈现的是一个庞大的集中式文档系统,也可以认为它是一个分布式系统。
不幸的是,我们现在还无法做到这一点。
例如,用户明白这样一个事实:
文档位于不同的地点,并由不同的服务器处理。
1.2目标
分布式系统必须能够让用户方便地与资源连接;必须隐藏资源在一个网络分布这样一个事实;必须是开放的;必须是可扩展的。
1.2.1让用户连接到资源
分布式系统最主要目标是使用户能够方便地访问远程资源,并且以一种受控的方式与其他用户共享这些资源。
资源几乎可以是任何东西,其典型例子包括打印机、计算机、存储设备、数据、文件、Web页以及网络,但这些只是资源中的一小部分。
有很多理由要求资源共享,一个显而易见的理由是降低经济成本。
例如,让若干用户共享一台打印机比为每一位用户购买并维护一台打印机要划算的多。
基于同样的原因,共享超级计算机和高性能存储系统这样昂贵资源也是很有意义的。
1.2.2透明性
如果一个分布式系统能够在用户和应用程序面前呈现为单个计算机系统,这样的分布式系统就称为透明的。
(1)分布式系统的透明性
透明性的概念可以运用到分布式系统中的各个方面,如图1.2所示。
透明性
说明
访问
隐藏数据表示形式的不同以及资源访问方式的不同
重定位
隐藏资源是否在使用过程中移动到另一个位置
并发
隐藏资源是否由若干相互竞争的用户共享
故障
隐藏资源的故障和恢复
持久性
隐藏资源(软件)位于内存中还是硬盘中
图1.2分布式系统中不同形式的透明性(ISO1995)
访问透明性指对不同数据表示形式以及资源访问方式的隐藏。
例如,要将一个整型数从基于In处理器的工作站传输到一台SunSPARC机器上,我们必须考虑到In处理器传输数据字节的顺序是littleendian格式(先传输数据的高位字节),而SPARC处理器却使用bigendian(先传输数据的低位字节)。
在数据表示形式上还会存在其他的差别。
例如,分布式系统中的多个计算机系统可能运行的是不同的操作系统,这些操作系统的文件命名方式不同。
文件命名方式的差异以及由此引发的文件操作方式的差异都应该对用户和应用程序隐藏起来。
(2)透明度
虽然对于任何分布式系统来说,实现分布透明性通常是可取的,但是在某些情况下,把所有分布情况都对用户屏蔽得严严实实并不见得有好处。
这样的一个例子是,如果您订阅了一份电子报刊,并且要求它在每天本地时间早上7点之前就寄到邮箱里,而您现在呆在地球另一端的不同时区,您就会发现“早报”不在是早上寄到的。
另外,还必须在高度的透明性和系统性能之间进行权衡,得出折衷方案。
例如,许多Internet应用程序会不断尝试连接到某台服务器,多次失败后才最终放弃。
这种在用户转向另一台服务器之前竭力隐藏服务器短暂故障的企图会导致整个系统变慢。
在这种情况下,最好还是让用户早一些放弃,或者至少允许用户取消这种连接的尝试。
在设计并实现分布式系统时,把实现分布的透明性作为目标是正确的,但是应该将它和其他方面的问题(比如性能)结合起来考虑。
1.2.3开放性
开放的分布式系统的另一个重要目标是,它必须是灵活的,要能够方便的把由不同开发人员开发的不同组件组合成整个系统。
同时,还必须能够方便地添加新组件、替换现有的组件,而不会对那些无须改动的组件造成影响。
换句话说,开放的分布式系统应该是可扩充的。
例如,在灵活的系统中,要添加可运行于另一个操作系统上的部件应该是比较容易的,即使要更换整个文件系统也不应该太对困难。
但根据我们从日常实践中得到的经验,要实现灵活性是比较困难的。
1.2.4可扩展性
通过互联网,世界范围的互联正在变得像给世界任何地方的人寄张明信片一样平常。
考虑到这种情况,分布式系统开发者都将可扩展性作为最重要的实际目标之一。
系统的可扩展性至少可以通过三个方面来度量(Neuman1994)。
首先,系统要能在规模上扩展,也就是说可以方便地把更多的用户和资源加入到系统中去。
其次,如果系统中的用户和资源可以相隔极为遥远,这种系统就称为地域上可扩展的系统。
最后,系统在管理上是可扩展的,也就是说,即使该分布式系统跨越多个独立的管理机构,仍然可以方便地对其进行管理。
不幸的是,在以上这三个方面或其中某一两个方面可扩展的系统常常在扩展之后表现出性能的下降。
1.3分布式文件系统
鉴于共享数据是分布式系统的基础,分布式文件系统是构成许多分布式应用程序的基础就不足为奇了。
分布式文件系统允许多个进程在长时期内以一种安全、可靠的方式共享数据。
所以,它们已被用作分布式系统和分布式应用程序的基础层。
在本节中,我们把分布式文件系统看作通用分布式系统的模型[2]。
我们将详细讨论两个不同的分布式文件系统。
第一个实例是SUNNFS(networkfilesystem,网络文件系统),它已经得到了广泛应用,现在正逐渐向基于Internet的大规模文件系统的方向发展。
NFS的大多数实现基于其版本3规范。
另一个完全不同的分布式文件系统是Coda。
Coda源于AFS(Andrew文件系统),AFS是一个在设计是就考虑到可扩展性的大规模系统。
Coda与许多其他文件系统的区别在于它在面对网络分区时支持连续操作。
特别是那些故意时常断开网络连接的移动用户(比如,使用膝上型计算机的人们)会从中获益。
我们也将简要讲述其他三个系统。
Plan9是一个将所有资源都视为文件的分布式系统。
从这种意义上来说,它可以被视为一个基于文件的分布式系统。
我们将讲述的另一个系统是xFS,其与众不同之处在于它没有服务器,而是让客户实现文件系统。
最后,我们会介绍SFS,该系统强调可扩展的安全性[3]。
1.3.1SUN网络文件系统
我们以SUN微系统的网络文件系统(networkfilesystem),即通常所说的NFS,开始讨论分布式文件系统。
NFS最初是Sun为在它的基于UNIX的工作站上的使用而开发的,但是NFS已在许多其他系统中实现。
NFS的基本思想是每台文件服务器提供它的本地文件系统的标准化视图。
也就是说,它不关心如何实现本地文件系统,每台NFS服务器支持相同的模型。
这个模型带有一个通信协议,该协议允许客户访问存储在一台服务器上的文件。
这种方法允许大量异构进程共享一个公共的文件系统,其中的进程可能运行于不同的操作系统和机器上。
(1)NFS概述
与其说NFS是一个真正的文件系统,不如说它是共同为客户提供分布式文件系统模型的协议的集合。
NFS协议是以不同的实现之间应该易于进行互操作为目的而设计的。
因此,NFS可以运行于大量异构计算机之上。
(2)NFS体系结构
NFS底层的模型是远程文件服务的模型。
这个模型为客户提供对远程服务器所管理的文件系统的透明访问。
但是,客户通常不知道文件的实际位置,相反,NFS为客户提供访问此文件系统的接口,此接口类似于传统本地文件系统所提供的接口。
也就是说,客户仅被提供包含多种文件操作的接口,而服务器负责实现这些操作。
因此,这一模型也被称为远程访问模型(remoteaccessmodel),如图
1.3.1(a)上载下载模型
与之相对照,在上载、下载模型(uploaddownloadmodel)中,客户从服务器下载文件后,在本地访问该文件,如图1.3.1(a)所示。
客户完成对文件的访问后,再将该文件上载回服务器,以便其他客户使用该文件。
当客户下载一个完整的文件,修改该文件,然后将其放回服务器时,可以使用Internet的FTP服务。
尽管NFS基于UNIX的版本占主流地位,但是NFS已开发了多种版本以用于许多不同的操作系统。
实际上,对所有现代UNIX系统而言,NFS通常按照图1.3.1(b)所示的层次体系结构实现。
图1.3.1(b)
(3)文件系统模型
NFS版本四支持硬链接和符号链接。
文件具有文件名,但是访问它们是通过一种类似UNIX的文件句柄(file,也就是说一共有finger表上一共有m个表项,分别记录的是节点的标识符加2i(i=0,2,…m–1)mod2m的和的值的后继节点地址。
如图2-5所示,节点8的finger表就按此规则记录了与其节点标识符相差1,2,4,8,16和32的标识符的后继节点的位置。
图2.3.1Chord环和finger表
2.3.2Chord算法的查找过程
Chord算法资源查找过程如图2.3.2
(1)所示[13],下面详细介绍下算法各步骤的具体
的处理过程:
(1)首先将要查找的资源关键字用SHA-1哈希函数计算出一个key值;
(2)查看该key值是否存在本节点上,判断的条件是,该key值大于节点的
前驱节点的标识符,而小于等于该节点的标识符;
(3)如果是存在本节点,则将本节果返回结果给查找节点;
(4)如果不存在本节点,则查询finger表,返回的下一跳地址是其表项标识
符值是最后一个小于等于key值的后继节点,如果是finger表的第一项key值就
大,则返回finger表的最后一个表项标识符的后继节点地址作为下一跳地址;
(5)发送查找请求给下一跳地址,重复过程
(2)到(5),直到进入过程(3)则
结束。
由此可见,Chord算法的查找过程是一个递归的过程,递归的结束条件是查
找到该资源关键字的key值所在的节点。
图2.3.2查找过程
1、Hash节点IP地址->m位节点ID(表示为NID)
2、Hash内容关键字->m位K(表示为KID)
3、节点按ID从小到大顺序排列在一个逻辑环上
4、存储在后继节点上,Successor(K):
从K开始顺时针方向距离K最近的节点
5、Hash节点IP地址->m位节点ID(表示为NID)
6、Hash内容关键字->m位K(表示为KID)
7、节点按ID从小到大顺序排列在一个逻辑环上
8、存储在后继节点上
9、Successor(K):
从K开始顺时针方向距离K最近的节点
下面以查找K54为例,过程如下:
(a)(b)
(c)
(d)
3基于DHT的Chord算法的改进
3.1影响搜索算法性能的因素
P2P搜索算法与P2P网络拓扑结构有着密切的关系[7],针对不同的P2P网络拓扑结构,有着不同的搜索算法。
对于集中式的网络拓扑结构,如图3.1(a),由于存在中央服务器,整个系统对中央服务器的依赖度很高,一旦中央服务器受到黑客攻击出问题,整个网络系统将立即崩溃。
图3.1(a)集中式网络拓扑结构
对于非结构化的P2P网络拓扑结构,大多采用的是泛洪搜索算法。
这种搜索算法虽然搜索范围很广,但是因为网络拓扑结构的原因,在搜索过程中会产生大量的消息冗余,另外搜索广度也不易控制,造成了资源的浪费。
具体搜索过程如图3.1(b)所示。
图3.1(b)消息冗余图示
如图3—2,当网络中的节点A要在j网络中搜索目标对象资源的时候,它首先会向自己的邻居节点B和c发送搜索消息,当B和c接收到这个消息后,同时又会向自己的邻居节点D、E以及E、F发送广播消息,在这样一个非结构化网络拓扑中,搜索过程中就会产生大量的消息冗余,如节点B在收到搜索请求后,同样也会向节点c发送消息(冗余搜索消息为图中虚线所示),严重影响搜索效率,同时也造成了资源的浪费。
对于结构化P2P网络搜索算法,比如传统的Chord算法。
由于整个网络拓扑成一个环形状,当要在该网络中搜索目标对象资源时,搜索方向足按照顺时针的方向进行搜索的,如要从N8这个节点开始搜索K54这个资源,那么搜索过程中所遍历的网络节点将会很多,虽然也能搜索到需要的资源,但是效率不高。
综上所述,本文发现影响P2P搜索算法性能主要有以下两个因素:
(1)P2P网络拓扑结构,网络的稳定性,包括节点的加入与退出。
(2)搜索消息在网络中的路由寻址策略,即搜索算法。
3.2小世界现象对P2P搜索技术的启示
所谓小世界现象,或称“六度分离(sixdegreesofseparation)”,是社会网络中的基本问题,即每个人只需要很少的中间人(平均6个)就可以和全世界的人建立起联系。
在这一理沦中,每个人可看作是图的节点[14],并有大量路径连接着他们,相