预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于JXTA的分布式存储系统的设计马黎艳[摘要]使用基于JXTA平台的P2P分布式体系结构,采用Chord环路作为网络的拓扑结构,节点ID和文件ID的生成则通过使用某种HASH算法如MD5,SHA等,设计了一个高可扩展、高可靠、高性能的分布式存储系统。[关键词]P2PChordJXTA分布式存储系统一、引言由于计算机通信技术的高速发展,网络上的信息资源越来越多,访问量也越来越大,基于传统的集中式存储方式已经不能满足用户的需要。随着P2P技术的发展,基于P2P的分布式存储系统也相应地得到了快速发展。目前,已经有很多比较成熟的P2P分布式文件存储系统,其中最典型的有:Napster、OceanStore、Past、Chord等文件存储系统。这些系统的基本思想是将数据存储、访问与固定的位置分离开来,通过P2P网络将Internet上零散的计算机连接起来,整合这些计算机上的空闲存储资源,构建出一个高可扩展、高可靠、高性能的分布式存储系统。二、相关技术1.Chord简介Chord在2001年由麻省理工学院提出,其核心思想就是要解决如何在P2P网络中找到存有特定数据的节点。Chord协议中其规定使用的散列算法为SHA-1,并在此基础上提供了优化的路由算法。在Chord中,每个节点需要存储m个其他节点的信息,这些信息的集合被称为查询表。表格中的节点不是直接相邻的节点,它们的间距(ID间隔)将成2k的关系排列(k表示表中的数组下标)。这样形成的节点之间路由关系实际上就是折半查找算法需要的排列关系。在查询的过程中,查询节点将请求发送到与键值最接近的节点上。收到查询请求的节点如果发现自身存储了被查询的信息,可以直接回应查询节点;如果被查询的信息不在本地,就根据查询表将请求转发到与键值最接近的节点上。这样的过程一直持续到找到相应的节点为止,查询过程实际上就是折半查找的过程。2.JXTA简介JXTA是Sun微系统对等网络的标准,以它来促进和探究分布式计算的新方法。JXTA具体来说是一种标准组件平台,它提供了用于开发分布式服务和应用程序的基本组件。整套技术由一组开放源码的P2P协议组成,这组协议使网络上任何连接着的计算设备的协作变为可能。使用这些协议,节点可以互相合作来建立自我组织、自我管理的对等组,而不必关心它们在网络中所处的位置(在网络边缘或者防火墙的后面),并且也不需要集中的管理机构。JXTA体系结构由三层组成。应用层(Applications)包括了应用JXTA服务开发出来的完整的P2P应用程序。比如,P2P及时消息、文件和资源共享、P2P电子邮件系统、分布式存储系统等。服务层(Services)包含一些网络服务,提供了P2P网络通用的功能,如查找、共享等机制、协议转换等。核心层(JXTACore)封装了P2P网络最基本的要素,包含了服务所需要的核心功能,包括对等体、对等组、对等体发现和相关的安全原语。三、系统设计系统采用JXTA平台进行P2P的设计开发,以Chord环路作为网络的拓扑结构,节点ID和文件ID的生成则通过使用某种HASH算法如MD5,SHA等,文件的存储与下载则使用CMS来管理。1.节点加入与离开Jxta为发现对等节点、对等组和其他信息提供了一个异步机制,所发布的关于对等节点或对等组的信息被称为通告,节点正是通过搜寻相应的通告来发现它所需要的资源。当节点X希望加入JXTA网络时,首先,查找某个对等组内的通告,发送加入请求,组内其他节点收到该请求后做出响应。节点与第一个发出响应的节点Y通话,以便初始话本地节点查询表(fingertable)、跟新其他节点查询表及转移关键字信息。新节点X以x+2i-1(l≤i≤m)为消息key值向Y发出请求,查找消息的Successor节点和查询表(fingertable)项,以此填充自己的查询表(fingertable)项。当新节点完成了自己的路由信息组建之后,通知其他相关节点自己的加入,以逆时针的方向递归地通知相关节点更新自己的路由信息。最后,其他节点将所有键值归属于X的关键字(即后继节点是X的关键字)转移到节点X上。当节点加入时首先通过哈希函数产生节点ID,然后找到ID相邻的两个节点作为此节点的前驱和后继节点,系统中每个节点都保留其邻近的前驱和后继节点信息。当节点退出时,此节点的前驱节点需将其后继更新为退出节点的后继节点。2.系统通信系统采用Java事件处理机制和Jxta自身的管道通信机制,实现了异步线程的节点通信功能。在这种通信机制下,节点可以接收单播和多播请求并做出响应。在管道消息到来之前,每个节点需要安装侦听器来处理来自其他节点的消息。当消息到达后,节点对管道报文消息进行解析处理,产生相应的事件,事件会激活侦听器进行请求响应的处理。节点A建立输入管道并实现net.jxta.pipe.Pi