一种用于阿瑞斯网络的缓存服务器的实现方法

文档序号:7801346阅读:224来源:国知局
专利名称:一种用于阿瑞斯网络的缓存服务器的实现方法
技术领域
本发明是一种针对阿瑞斯(ARES)网络的缓存服务器,主要用来解决对阿瑞斯网络中资源进行本地缓存的问题,进而优化阿瑞斯网络流量,减少主干网压力,属于对等网络领域。
背景技术
对等网络是建立在网络应用层上的一种特殊的分布式系统,每一个对等节点都可以通过各自的路由相互通信。传统互联网的主要方式是客户端/服务器模式,在这种网络模式下整个网络是由独立的客户端和服务器组成的,服务器作为信息提供者,而客户端作为信息请求者。对等网络模式打破了传统的客户端/服务器模式通信方式,降低了对服务器的依赖性,一些对等网络甚至不需要服务器,用户可以不经过服务器和其他用户进行连接。在对等网络中,每一个节点都是平等的参与者,既可以作为客户端向其它节点请求服务,同时也可以作为服务器端为其它节点提供服务,从而有效的利用分布在终端计算机上的网络资源,以降低对中央服务器的资源需求。阿瑞斯是对等网络技术的具体应用,它是一个免费的带聊天室和共享文件功能的 P2P (Peer-to-Peer,对等计算)软件。其发展始于2002年,原本在Gnutella网络上运营, 后来经过改写,形成了目前的阿瑞斯网络。阿瑞斯网络将节点分为超级节点和普通节点,超级节点之间形成了结构化的DHT (Distributed Hash Table,分布式哈希表)拓扑网络,普通节点则连接到超级节点。阿瑞斯协议以其开源、功能强大、资源充足等特性吸引了大量的使用者,逐渐成为欧美地区比较流行的P2P软件之一,拥有大量的用户群。但是,由于大量阿瑞斯应用,阿瑞斯流量侵占主干网带宽,已经影响到了其他网络业务的运行。为了解决这一问题,最有效的方法是对阿瑞斯流量进行合理的疏导,在主干网边缘架设阿瑞斯缓存系统,将阿瑞斯流量尽量的控制在内网,从而减少主干网的压力。阿瑞斯缓存系统主要包括三大功能模块重定向服务器、索引服务器和缓存服务器。缓存服务器是阿瑞斯缓存系统的核心,其将大量的外网资源缓存在本地,当用户进行下载时,只需要到内网的缓存服务器去下载即可,而不需要再到外网下载,从而优化了网络流量。综上可得, 如何实现用于阿瑞斯网络的缓存服务器就显得十分重要。

发明内容
技术问题本发明的目的是缓存阿瑞斯网络中的资源,并为该网络中其他节点提供资源下载服务。本发明相比以往的方案,该方案具有实用性、灵活性和易扩展性,具有很好的市场前景。技术方案本发明采用了特定的实现方法,先对阿瑞斯网络进行研究,再对缓存服务器进行设计,最后进行测试。其主要目的是将阿瑞斯网络中的资源存储在本地,当该网络中其他节点需要相应资源时,为其提供资源下载服务。根据阿瑞斯网络的报文结构和交互流程,登录阿瑞斯网络中的超级节点并更新超级节点列表;利用超级节点进行哈希搜索,获取资源节点列表;根据资源节点列表进行资源下载;响应其他节点的资源下载请求,并提供资源传输服务。缓存服务器主要由以下几个功能模块组成算法模块、登录模块、搜索模块、下载模块、上传模块。缓存服务器实现方法包括的步骤为
步骤1.对阿瑞斯网络的报文结构和交互流程进行分析研究,生成阿瑞斯网络分析文

步骤2.根据步骤1的阿瑞斯网络分析文档,对缓存服务器需要完成的功能进行分析, 生成需求分析文档;
步骤3.按照步骤2的需求分析文档设计模块功能,并对缓存服务器算法模块、登录模块、搜索模块、下载模块和上传模块之间的逻辑关系和交互形式进行详细分析,形成概要设计文档;
步骤4.在步骤3的概要设计文档的大体框架下,设计并实现算法模块,其负责阿瑞斯网络报文交互过程中所使用的关键算法,包括加密解密算法和SHA (Secure Hash Algorithm,安全哈希算法)算法;
步骤5.在步骤3的概要设计文档的大体框架下,设计并实现登录模块,读取阿瑞斯超级节点列表文件并连接超级节点,维护和超级节点的连接;
步骤6.在步骤3的概要设计文档的大体框架下,设计并实现搜索模块,其向阿瑞斯超级节点发送哈希搜索请求,接收并处理哈希搜索请求返回报文,从中获取资源节点列表;
步骤7.在步骤3的概要设计文档的大体框架下,设计并实现下载模块,其连接的资源节点,询问有无响应文件分片,并进行文件分片下载和文件分片组装;
步骤8.在步骤3的概要设计文档的大体框架下,设计并实现上传模块,其响应普通节点的下载请求,根据缓存资源的情况进行应答并进行文件分片的上传;
步骤9.对步骤4、5、6、7、8所实现的功能模块进行测试,验证其是否满足步骤3的概要设计文档的功能要求。有益效果本发明提取一个针对阿瑞斯网络的缓存服务器的实现方法,相比以往的方法有一些显著的优点
大量并发连接支持相对于单连接模型、Poll模型、Select模型,缓存服务器采用了 Epoll模型,使其可以在单个进程中开启大量的网络连接,并支持数万的并发连接数。单连接模型并不适用于服务器,Poll模型、Select模型常用于小型服务器。当网络并发连接数量不断增大,且非活动网络连接所占比例不断增大时,Select模型和Poll模型的性能会随着网络并发连接数量的线性上升而成非线性速度下降。而Epoll模型只对活动的网络连接进行操作,并支持将多个事件合并为一个事件进行处理,从而大大提高了对大量并发连接的支持能力。对阿瑞斯网络的高适应性本方法采用了源代码与网络抓包相结合的方法先对阿瑞斯网络的报文结构和和交互流程进行分析并形成相应文档,再对缓存服务器进行需求分析。这样使得对阿瑞斯网络的了解十分透彻和细致,让缓存服务器不仅仅是完成缓存任务, 还能够完全模拟阿瑞斯网络中节点的行为。当阿瑞斯网络进行更新升级时,由于对其研究透彻,模仿到位,很容易对更新进行定位,方便缓存服务器进行相应的升级。
模块化设计本方法将缓存服务器分为五大功能模块进行设计。算法模块主要负责加解密和哈希操作,登录模块负责管理与超级节点的连接,搜索模块负责资源的哈希搜索,下载模块负责资源的分片下载,上传模块为其他节点提供服务。这五个模块功能独立, 模块耦合度低,一个模块的变动不会对其他模块产生影响,十分适合构建大型系统。软件设计的模块化可以缩短产品研发周期,增加产品系列,提高产品质量,快速应对市场变化。高稳定性本方法对缓存服务器的各个功能模块进行了单元测试,并对整个服务器进行了系统测试,确保了缓存服务器既实现了既定的功能,又可以7* 小时稳定运行。良好的扩展性由于本方法采用模块化的设计方法,系统模块功能层次分明,因此可以方便的添加新的功能,也可以很容易的升级现有的功能,所以该方法拥有良好的可扩展性。


图1是阿瑞斯缓存服务器部署图; 图2是阿瑞斯缓存服务器模块图3是阿瑞斯缓存服务器软件架构图; 图4是登录模块流程图; 图5是超级节点连接数控制流程图; 图6是哈希搜索流程图; 图7是搜索返回报文处理流程图; 图8是下载模块流程图; 图9是上传模块流程图。
具体实施例方式一、体系结构
本方法所实现的用于阿瑞斯网络的缓存服务器是阿瑞斯缓存系统的核心部分,部署如图1。重定向服务器与路由器旁路并联,接收路由器的流量镜像。缓存服务器和索引服务器都部署在路由器的内网侧。缓存服务器采用了模块化的设计,包含了算法模块、登录模块、搜索模块、下载模块、上传模块,如图2所示。算法模块用于实现阿瑞斯网络交互过程中所使用到的关键算法,包括了 SHA子模块和加解密子模块。SHA子模块用以实现对本地文件计算SHA摘要,以供搜索模块、下载模块、上传模块使用。加解密子模块实现阿瑞斯网络报文内容加解密功能,是生成其他模块最终报文的基础。登录模块包含了登录管理子模块和登录子模块。登录管理子模块用于管理与超级节点的连接,控制连接数量,更新超级节点列表。登录子模块用于与单个超级节点建立连接,发送登录请求,交互双方状态。搜索模块包含了搜索管理子模块、搜索请求发送子模块、返回结果处理子模块。搜索管理子模块用以管理每个哈希值所对应的哈希搜索。搜索请求发送子模块按哈希值构造哈希搜索报文并发送到超级节点。返回结果处理子模块用以接收超级节点返回的资源节点信息,对其进行归类处理。 下载模块包含了下载管理子模块和下载子模块。下载管理子模块用于管理各个具体下载。下载子模块用于实现对某一特定哈希值文件的下载,包括了与资源节点建立连接, 进行文件分片下载以及对文件分片进行组装。上传模块包含了上传管理子模块和上传子模块。上传管理子模块用于管理所有的上传过程。上传子模块用于响应普通节点对某一特定哈希值文件的分片下载请求,并传输文件分片。为了优化缓存服务器的性能,在使用Epoll模型的基础上,采用了多线程的架构, 将缓存服务器分割为多个线程,在同一时间完成多项任务,如登录管理线程、哈希搜索管理线程、下载管理线程、上传管理线程等,其软件架构如图3所示。当索引服务器通知进行哈希搜索时,缓存服务器的哈希搜索管理线程就会开启一个ID唯一的哈希搜索线程去进行哈希搜索,然后将哈希搜索的结果返回给索引服务器。当索引服务器通知下载外网资源时, 缓存服务器的哈希搜索管理线程先开启一个ID唯一的哈希搜索线程去进行哈希搜索,然后根据搜索结果,由下载管理线程启动ID唯一的下载线程,进行文件下载。下载线程会尝试与每个资源节点进行连接,并启动下载子线程,进行文件分片传输。当有节点请求下载时,缓存服务器的上传管理线程查询有无该文件,如果有,创建上传线程用于文件分片的传输。二、方法流程
该部分详细说明发明内容各个部分的设计与实现
算法功能实现利用通用的SHA库来实现SHA算法功能,利用伪随机序列加解密算法来实现加解密功能。SHA算法功能过程为调用SHA-l_init ()函数为进行初始化,分配内存空间并赋值;接着调用SHA-Iupdate ()函数来更新SHA-I摘要,其将未处理的数据移到头部, 并循环进行摘要计算;最后调用SHA-l_final ()函数完成SHA摘要,其将转换好的SHA摘要每8位为一组进行数据分割。阿瑞斯网络中的加解密算法是一种伪随机序列加密算法,其入口参数有数据块地址、数据块长度、密钥、乘数、加数。为了提高加解密算法的效率,使用了按位异或的方法,速度极快。加密算法的具体实现步骤如下
步骤1.初始化参数、包括数据块地址、数据块长度、密钥、乘数和加数; 步骤2.判断是否到达数据块末尾,如果到达末尾,就退出;否则,继续加密; 步骤3.密钥右移8位;
步骤4.当前长度为一个字节的数据块与初始密钥进行按位异或(加密); 步骤5.密钥等于密钥与加密后数据块之和; 步骤6.密钥等于密钥与乘数之积; 步骤7.密钥等于密钥与加数之和,并跳转到步骤2。解密算法的具体实现步骤如下
步骤1.初始化数据块地址、数据块长度、初始密钥、乘数、加数和临时变量; 步骤2.判断是否到达数据块末尾,如果到达末尾,就退出;否则,继续解密; 步骤3.密钥右移8位;步骤4.临时变量等于当前一个字节的加密数据块与密钥异或的结果; 步骤5.密钥等于密钥与当前加密数据块之和; 步骤6.密钥等于密钥与乘数之积; 步骤7.密钥等于密钥与加数之和;
步骤8.当前加密数据块等于临时变量中的解密后数据块,并跳转到步骤2。登录功能实现登录总体流程如图4所示。首先对登录模块进行初始化操作,分配内存,并注册定时器超时处理函数。接着读取超级节点列表,向超级节点发送预登录报文(03 00 5a 06 06 05),等待超级节点返回报文,并注册响应的超时处理函数。如果超级节点在定时器规定时间内返回报文,说明与超级节点的连接已经建立,注册PING报文事件的处理函数,并向超级节点发送握手报文,握手报文包括了普通节点的监听端口、用户名、 GUID (Globally Unique Identifier,全球唯一标识符)和内网IP地址等信息;如果超级节点没有在定时器规定时间内返回报文,则说明该超级节点不可用或者超级节点比较忙, 则从超级节点列表中选择下一个超级节点进行登录。本发明对缓存服务器连接的超级节点数量进行了控制,控制流程如图5所示。如果需要连接的超级节点数等于零,则断开所有已建立的连接,终止所有正在建立的连接,这种情况一般在关闭缓存服务器时发生;如果需要连接的超级节点数小于已经建立连接的超级节点数,则断开多余的连接,终止所有正在建立的连接;如果需要连接的超级节点数大于已经建立连接的超级节点数,则连接下一个超级节点。普通节点一般与4个超级节点保持固定的连接,但是为了缓存服务器的稳定性和效率,最终选择超级节点的连接数为40个。搜索功能实现哈希搜索分为搜索请求发送过程和返回报文处理过程。哈希搜索请求发送过程如图6所示。首先分配内存空间并初始化,然后根据其哈希值查找搜索管理器中是否已有此哈希搜索信息。搜索管理器通过哈希搜索的ID号标识唯一的哈希搜索并对其进行管理,但是在搜索管理器中查找的过程并不是比对ID号,而是利用ID号遍历每一个哈希搜索,并比对哈希搜索的哈希值。如果已有该哈希搜索,就直接退出;如果没有该哈希搜索,则新建一个哈希搜索并添加到搜索管理器中。如果添加不成功,则释放此搜索并返回;如果添加成功,则根据所要搜索文件的哈希值构造哈希搜索请求报文,然后将这些报文发送给超级节点,最后释放报文空间并退出。搜索返回报文的处理流程如图7所示。当接收到超级节点返回的搜索结果,缓存服务器就会调用相应的处理函数。函数首先对搜索返回报文的各个字段进行解析,具体包括文件哈希值、资源节点的内网IP地址、资源节点的外网IP地址和端口、资源节点的带宽能力和用户名、资源节点所连接的一个超级节点的IP地址和端口,并将这些信息存储在 result结构体中。然后,搜索管理器对其管理的哈希搜索进行查询,检查是否有此哈希搜索。如果搜索管理器中没有该哈希值的搜索,则直接退出;如果搜索管理器中有该哈希值的搜索,就对该搜索的标志字进行判断,以确定该搜索是正在进行的搜索还是已经结束的搜索。如果该搜索已经结束,则丢弃所收到的返回结果并推出;如果该搜索正在进行,就将相应的result结构体加入到对应的哈希搜索结果列表中。下载功能实现下载模块的流程如图8所示。首先,进行初始化操作,对哈希搜索得到的资源节点列表进行拷贝操作。然后从资源节点列表中选择部分节点,发送下载请求报文。如果发送失败,就释放相应的资源并返回;如果发送成功,就等待资源节点返回应答报文,并设置超时定时器。如果在规定时间内,资源节点返回了应答报文,就对报文进行解析,返回的报文可能有四种情况,即资源节点忙,资源节点无此资源、资源节点错误和资源节点可用。当对返回报文解析结果表明资源节点可用时,即可认为应答成功。当应答成功时,就根据下载情况构造分片下载请求报文,该报文为加密报文。随即,将分片下载请求报文发送给资源节点,并设置超时定时器。如果发送成功,就等待资源节点返回分片信息,并根据分片信息选择是否传输文件分片。分片并不一定是按顺序传输的,但是每次请求的文件分片里含有偏移量和分片大小,可以根据这些信息对文件分片进行重组,并写入临时文件。上传功能实现上传模块的流程如图9所示。当缓存服务器接收到文件下载请求报文后,就会对报文进行解析,并查询有无相应的文件,这里有4种情况
(1)当缓存服务器发现报文的数据标识无法对应上时,就认为该报文有误,并发送 ERROR报文给普通节点;
(2)当缓存服务器在文件中未找到相应的文件分片或者报文中的分片偏移值和分片大小错误,就认为分片未找到,并发送N0T_F0UND报文给普通节点;
(3)当缓存服务器发现自己的上传带宽已经用完或者上传连接数到达上限,即认为当前服务器忙碌,并发送QUEUED报文给普通节点;
(4)当缓存服务器能够找到文件分片并且服务器状态良好,就准备发送分片,并发送 SUCCESS报文给普通节点。如果发送的报文为SUCCESS,缓存服务器就会构造文件分片报文,并将报文通过 TCP协议发送给普通节点。
权利要求
1. 一种用于阿瑞斯网络的缓存服务器的实现方法,其特征在于该方法具体过程如下 步骤1.对阿瑞斯网络的报文结构和交互流程进行分析研究,生成阿瑞斯网络分析文档,步骤2.根据步骤1的阿瑞斯网络分析文档,对缓存服务器需要完成的功能进行分析, 生成需求分析文档;步骤3.按照步骤2的需求分析文档设计模块功能,并对缓存服务器算法模块、登录模块、搜索模块、下载模块和上传模块之间的逻辑关系和交互形式进行详细分析,形成概要设计文档;步骤4.在步骤3的概要设计文档的大体框架下,设计并实现算法模块,其负责阿瑞斯网络报文交互过程中所使用的关键算法,包括加密解密算法和安全哈希算法;步骤5.在步骤3的概要设计文档的大体框架下,设计并实现登录模块,读取阿瑞斯超级节点列表文件并连接阿瑞斯超级节点,维护和阿瑞斯超级节点的连接;步骤6.在步骤3的概要设计文档的大体框架下,设计并实现搜索模块,其向阿瑞斯超级节点发送哈希搜索请求,接收并处理哈希搜索请求返回报文,从中获取资源节点列表;步骤7.在步骤3的概要设计文档的大体框架下,设计并实现下载模块,其连接的资源节点,询问有无响应文件分片,并进行文件分片下载和文件分片组装;步骤8.在步骤3的概要设计文档的大体框架下,设计并实现上传模块,其响应普通节点的下载请求,根据缓存资源的情况进行应答并进行文件分片的上传;步骤9.对步骤4、5、6、7、8所实现的功能模块进行测试,验证其是否满足步骤3的概要设计文档的功能要求。
全文摘要
本发明的目的是提供一种用于阿瑞斯网络的缓存服务器及其实现方法。目前阿瑞斯网络的流量占用了欧美主干网的带宽,可以通过在主干网边缘部署阿瑞斯缓存系统来解决。缓存服务器就是这一系统的核心,其可以连接到阿瑞斯网络中的超级节点并进行哈希搜索,根据哈希搜索所产生的资源节点列表进行文件分片下载,从而将文件缓存到本地;能够响应阿瑞斯网络中普通节点的文件分片下载请求,为其提供下载服务。
文档编号H04L29/08GK102510411SQ201110445988
公开日2012年6月20日 申请日期2011年12月28日 优先权日2011年12月28日
发明者孙力娟, 李致远, 林巧民, 王汝传, 肖甫, 邵星, 陈粒, 韩志杰, 黄海平 申请人:南京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1