基于P2P的数据共享平台设计与实现

时间:2022-10-05 10:14:34

基于P2P的数据共享平台设计与实现

摘 要: 通过对大型分布式系统在数据传输与共享中所遇到的问题的讨论,提出一个新的数据共享平台设计方案。该方案基于当前Internet广泛运用的P2P技术,结合文件压缩、数据加密、断点续传等相关技术手段,实现了分布式系统中网络间数据的高性能、高可靠传输与共享。

关键词: 文件压缩; 数据加密; 断点续传; P2P

中图分类号:TP393.08 文献标志码:A 文章编号:1006-8228(2014)11-07-03

Design and implementation of data share platform based on P2P technology

Hu Jie

(The 28th Institute of China Electronics Technology Group Corporation, Nanjing, Jiangsu 210007, China)

Abstract: Through the discussion on the problems happened in data transmission and share of the distributed system, a new data share platform solution is introduced. Based on the popular P2P technology on the Internet, several relevant technologies such file compression, data encryption and breakpoint transmission are adopted. Data transmission and share with high efficiency and reliability are realized.

Key words: file compression; data encryption; breakpoint transmission; P2P

0 引言

随着网络技术的快速发展,分布式技术在军事、金融、电信等各个领域得到越来越广泛的应用,当前许多大型信息系统都采用了分布式架构。随着系统的不断升级扩张,分布式系统部署的子节点越来越多,系统存储的数据规模也随之不断膨胀,且这些子节点与数据常常分布在不同的物理地域。当系统一些子节点数据发生更新时,需要与系统中其他子节点进行数据同步以保证数据的一致性。

目前通常的做法是:当分布式系统需要进行数据同步时,由发生数据变更的节点通知其他子节点,其他子节点向该节点发送数据更新请求,该节点作为数据服务器向其他节点传输最新数据,从而实现整个分布式系统的数据一致。然而,这种数据同步模式存在以下几个问题:首先,当分布式系统子节点大于一定规模时,作为数据服务器的子节点将存在严重的性能与网络传输瓶颈;其次,针对一些特殊行业的系统如银行、金融领域,远距离数据传输需要考虑数据的安全性问题;最后,如果分布式系统采用低速的传输线路,那么传输一个大的文件可能需要很长的时间,在长时间的数据同步过程中,一旦发生任何错误将导致整个数据同步工作必须重头开始。

针对以上问题,本文提出了一个基于P2P技术的分布式系统数据共享平台设计方案。

1 总体设计思路

分布式系统数据共享平台的设计目标是在各种速率的通信网络上实现数据的高效传输,同时为了保证数据的安全性,需要对数据进行加密处理。在具体的实施过程中,从以下几个方面进行设计。

⑴ 传输数据/文件的压缩,数据/文件的压缩是为了减少传输线路上数据的冗余,最大限度地利用传输线路的带宽。

⑵ 传输数据的加密,由于系统分布在不同的物理地域,数据传输过程中需要在节点间进行远距离数据传输,这存在被非法截取而导致内容外泄的风险。对数据进行加密后,即使在传输过程中被非法截取,对方也无法获得原始的数据内容。

⑶ 文件的断点续传处理,断点续传功能在低速率的通信网络尤为重要,当数据传输过程中发生错误后,文件可以接续之前已接收的数据继续传输,提高数据传输的成功率。

⑷ 基于P2P(点到点)传输技术的运用,如果采用传统C/S(客户端/服务器)模式,选取某个系统的节点作为数据服务器,随着系统的规模扩大,大量的客户端节点同时向服务器节点申请数据传输,服务器节点的应用负载和网络带宽必然不堪重负。采用P2P技术可以降低数据同步时对服务器节点的依赖,实现“下载客户端越多,下载速度越快”。

结合上述几项技术,下面给出分布式系统数据共享平台的总体设计思路。

发生数据变更的节点可视为服务器端子节点,而其他需要数据同步的子节点可视为客户端子节点。

对于服务器端,首先对需要同步的数据/文件进行预处理,包括数据/文件的压缩和加密,形成压缩加密后的中间文件。然后根据断点续传和P2P的思想,将文件分割为固定大小的文件块,并创建文件块索引表,该索引表记录了每个文件块以及目前网络中拥有该文件块的客户端节点。接下来,服务器端处于下载服务等待状态,当收到客户端的下载请求后,服务器端创建线程进行P2P的数据传输处理。在P2P数据传输处理线程中,服务器通过查找文件块索引表,找到每个文件块对应的第一个节点,并通知客户端和该节点直接进行数据传输。原则上服务器不发送任何文件块到客户端,只有当网络中所有客户端节点都没有某文件块时,服务器才发送该文件块到客户端,详细内容见后续P2P技术实现的描述,服务器端主流程图如图1所示。

[开始][数据/文件的压缩加密][形成压缩加密后的中间文件][文件分割并创建文件块索引][等待客户端下载请求][\&收到下载请求,创建线

程进行P2P的数据传输\&\&][结束]

图1 服务器主流程图

对于客户端,当开始下载时,首先检查是否存在已下载的内容,如果存在则接续已有的内容继续下载,否则从头开始下载。在下载过程中,需要实时更新当前已下载文件块的记录信息,同时为了应对断电、死机等意外情况,应保证每个文件块接收成功后再更新对应的记录信息,防止出现记录信息已更新但文件块尚未接收完毕的问题。当收到停止或结束的命令时,首先判断文件下载是否已经完成,如果已完成则进行文件的解密和解压以获取原始文件,否则记录当前的下载状态用来实现断点续传,客户端主流程图如图2所示。

[开始][收到停止或者结束命令][文件解密][文件解压][\&接续下载\&\&][结束][已有下载内容?] [下载完成?] [\&全新下载\&\&] [是][否] [是] [否]

图2 客户端主流程图

以上主要介绍了分布式系统数据共享平台的总体设计方案,下面就方案中涉及的文件压缩、文件加密、P2P数据传输处理等问题分别展开论述。

2 文件压缩的设计实现

文件压缩是数据压缩技术的一部分,所谓数据压缩是指通过各种算法减少数据的冗余,并尽可能地减少失真,从而提高传输效率和节约存储空间。数据压缩技术分为无损压缩和有损压缩两种:无损压缩在重构压缩数据后,其重构数据与原始数据是完全一致的;而有损压缩的重构数据与原始数据有所不同,但不影响原始数据的信息表达,压缩比高,一般适用于语音、图像、视频等多媒体领域。数据共享平台的文件压缩要求重构数据和原始数据一致,因此必须采用无损压缩,常见的无损压缩算法有:Huffman(哈夫曼)编码、游程编码、算术编码等[1]。这里我们采用Huffman编码完成文件的压缩。

Huffman编码是一种基于统计的变长编码,它通过将出现频率较高的信源符号用较短的码字来编码,而出现频率较低的信源符号用较长的码字来编码,从而使平均码长最短,达到最佳编码的目的。Huffman编码效率高,运算速度快,当前流行的压缩软件如WinRAR、WinZip都采用了Huffman算法[2]。

以下详细介绍采用Huffman编码实现文件压缩的步骤。

首先将文件看作一个个字节编码的组合,由于每个字节的内容最多有256(28)种可能,所以每个文件都是由不超过256种的字符组成。扫描原始文件,统计文件中出现的字符及其概率,将字符按概率从高到低排序。

由于Huffman编码是不等长编码,为了避免二义性,要求任何一个字符的编码都不能是另一个字符编码的前缀,又称为前缀编码。Huffman编码就是以字符出现的频率作为权值,通过构造Huffman树,生成码长最短的二进制前缀编码:

⑴ 假定某个文件中包含n种字符S1,S2,…,Sn,以字符出现的频率作为权值,得到权值的集合W={w1,w2,…,wn},定义n棵二叉树的集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均为空;

⑵ 在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左右子树上根结点的权值之和;

⑶ 从F中删除这两棵树,同时将新得到的二叉树加入到F中;

⑷ 重复⑵和⑶,直到F只含有一棵树为止,这棵树就是Huffman树;

⑸ 约定树的左分支表示字符‘0’,右分支表示字符‘1’,则从根结点到叶子结点的路径上分支字符组成的字符串就是码长最短的二进制前缀编码,即Huffman编码[3]。

以英文的文本文档为例,通常情况下文件中的每个字符占用8个二进制位,使用Huffman编码后,英文中e、a等出现频率最高的字母只占用了1到2个二进制位,尽管频率最低的字母z需要占用更多的位数(25个二进制位),但由于其出现的比例很低,通常不到1%,因此对于整个文件而言,每个字符平均占用的位数一般不超过4个二进制位,压缩后文件的大小不超过原始文件的一半。

3 文件加密的设计实现

文件加密可用的成熟算法有很多,主要分为对称算法和非对称算法。非对称算法都是基于复杂的数学难题。这些算法被公认为安全和有效的有三类:大整数分解问题类、离散对数问题类和椭圆曲线类。

这里选取RSA算法作为文件加密的算法,RSA算法是大数分解问题类的典型,其安全性基于整数因子分解问题的困难性,公钥和私钥是一对大素数的函数,从一个公开密钥和密文中恢复出明文的难度等价于分解两个大素数之积。

首先选取两个长度相等的大素数p和q,计算乘积[4]:

n=pq

然后随机选取加密密钥e,使e和(p-1)(q-1)互素,常用的e值是3,17和65537(216+1)。之后找出d,满足:

ed1 mod(p-1)(q-1)

d=e-1 mod((p-1)(q-1))

则d和n也互素。其中e和n是公用密钥,d是私用密钥,mod是求余运算。加密消息m时,将其看成是一个大整数,把它分成比n小的数据分组。按下面公式加密:

ci=mie(mod n)

解密消息时,取每一个加密后的分组ci并计算:

mi=cid(mod n)

结合分布式系统数据共享平台的设计思路,数据/文件传输前首先通过公钥对原始数据/文件文件进行加密得到密文,密文通过传输线路发送出去,其计算方法如下:

传输密文=RSAEncrypt公钥(原始文件)

接收方收到密文后,通过对方提供的私钥对密文进行解密得到原始文件,其计算方法如下:

原始文件=RSADecrypt私钥(传输密文)

因此,数据共享平台的加/解密步骤为:首先由分布式系统的服务器端生成一对公钥和私钥,服务器端使用公钥统一对原始文件进行加密,加密完成后将密文发送给客户端;各个客户端收到密文后,在本地使用由服务器端生成的私钥进行解密,从而得到原始文件。

此外,为了保证文件加密的安全,实际应用还需要注意两个问题:首先,RSA的安全性依赖于大数分解的困难,为了防止破解者利用大规模高性能计算机进行大数分解的暴力破解,应确保RSA密钥不小于1024位;其次,不允许通过发送密文的同一个线路传输私钥,应采用其他方式送达接收端。

4 断点续传和P2P技术的设计实现

断点续传技术的核心思想就是“化整为零”:将文件分割为一定大小的文件块,数据传输时以每个小的文件块为单位,如果传输过程中出现错误,下次重新开始时只需发送未接收的文件块,之前已经正确接收的文件块不必再次发送。

P2P又称为对等网络,是基于TCP/IP协议的一种新的网络技术,在P2P模型中,网络中每个节点是平等的,都同时兼有服务器和客户端的功能,节点之间可以直接互连进行数据的交互,从而消除了传统C/S架构中服务器端的瓶颈问题。利用P2P技术能够充分挖掘网络边缘节点的能力,降低数据传输对中心服务器的依赖[5]。当前,P2P技术在Internet网络中发展十分迅速,我们熟悉的即时通讯、BT下载、网络电视等应用都采用了该技术。

下面介绍在分布式系统数据共享平台设计中,如何将断点续传和P2P这两种技术相结合,实现数据传输的高可靠性和高效率。

正如之前所约定的,分布式系统中拥有最新的数据某个节点定义为服务器端节点。在P2P模型中,该服务器端节点不再作为数据内容的提供者,而是作为一个索引服务器。索引服务器记录了数据内容的索引和节点信息,辅助其他节点之间建立连接,数据的传输只在节点之间进行,不通过索引服务器。只有其他所有节点都没有对应的数据内容时,索引服务器才将内容直接发给数据申请者[6]。

首先,服务器端节点将文件分割为固定大小的文件块,文件块的大小应根据传输协议数据包的大小而定。因为当数据传输时,每一帧数据都会加上传输协议的报文头,如果文件块太大则会削弱断点续传的效果,而如果太小则会因为加了太多的报文头而造成线路带宽的浪费。假定该文件被分割成n块,分别为f1,f2,…,fn,该分布式系统一共有m个节点P1,P2,…,Pm,建立文件块和节点的索引表,表示该文件块已存在于系统中哪些节点,索引表的格式如表1所示。

表1 文件块索引表

[文件块\&存储节点链表\&f1\&P3\&P5\&P6\&\&\&f2\&P2\&P7\&P9\&P16\&\&f3\&P9\&P1\&\&\&\&…\&\&\&\&\&\&fn\&P8\&\&\&\&\&]

索引表在初始创建时,每个文件块的存储节点链表为空,随着其他节点下载文件块成功,对应的节点信息将被填入动态的存储节点链表。数据同步开始时,由某个需要数据同步的节点Pi向索引服务器发送同步请求,索引服务器收到请求后查询文件块索引表,找到每个文件块对应的存储节点链表,按如下步骤进行处理:

⑴ 如果文件块f1对应的存储节点链表为空,则由索引服务器直接发送数据给节点Pi,数据传输完成后,将节点Pi插入文件块f1的存储节点链表中;

⑵ 如果文件块f1对应的存储节点链表不为空(假设链表内容如表1所示),则通知申请节点Pi与f1存储节点链表的第一个节点(即节点P3)建立连接,由节点P3发送数据给节点Pi,数据传输完成后,将节点Pi插入到存储节点链表的头部;

⑶ 如果申请节点Pi与链表的第一个节点建立连接失败或者数据传输失败,即节点P3与Pi建链失败或数据传输失败,那么从f1存储节点链表中删除第一个节点P3,通知Pi与下一个节点(即P5)建立连接并传输数据,重复该步骤直到数据传输成功为止;

⑷ 如果执行步骤⑶始终未实现数据的成功传输,最终使得f1存储节点链表为空,则重复步骤⑴;

⑸ 对其他的文件块f2,f3,…,fn按照步骤⑴到⑷进行同样的处理。

在上述处理中,当发现存储节点链表中的节点无法正常建立连接或进行数据传输时,索引服务器将删除该失效节点以提高节点的查找效率。同时,新增加的有效节点插入链表的头部,也是为了提高存储节点链表的实时有效性[7]。

通过真实环境试验后发现:如果采用传统的C/S架构进行数据同步,当客户端逐步增加时,下载的速度逐步下降,当客户端数目增长到一定数目时,受到带宽和性能的限制,服务器甚至将无法响应客户端的更新请求;而采用P2P技术后,随着客户端数目的增加,下载的速度逐步提高,当客户端的数目增长达到文件块的数目时,下载速度达到顶峰,并且随着客户端的数目继续增加,下载的速度基本保持在顶峰值,没有出现明显的下降。

5 结束语

分布式系统数据共享多数采用了单服务器共享、多客户端访问的模式,存在着数据服务器负载有限以及网络传输瓶颈的问题。本文提出的方案通过P2P技术降低对数据服务器的依赖,并结合文件压缩、数据加密、断点续传等技术手段实现数据共享的可靠性和传输效率,有效的节省了数据同步时的服务器开销与网络带宽。随着综合电子信息系统的网络朝着扁平化发展,如何合理地利用P2P技术,在大规模分布式系统中实现全部信息的全网络共享,还需要进一步探讨。同时,在采用P2P技术后,如何对网络进行管理、规划以及数据流量的监控,避免出现网络风暴或堵塞,这些问题还需要后续更加深入的研究。

参考文献:

[1] 李玮,林明.基于自适应算术编码的字符型报文压缩技术[J].科学技

术与工程,2013.13(10):2836-2837

[2] 张凤林,刘思峰.Huffman*:一个改进的Huffman数据压缩算法[J].计

算机工程与应用,2007.43(2):73-74

[3] 严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社,2006.

[4] 陈传波,祝中涛.RSA算法应用及实现细节[J].计算机工程与科学,

2006.28(9):13-14

[5] 郑真,曹宝香.基于P2P的分布式软件构件库检索机制[J]. 计算机工

程,2010.36(2):48-50

[6] 周文莉,吴晓非.P2P技术综述[J].计算机工程与设计,2006.27(1):

76-79

[7] 张明军,彭娅等.P2P流媒体服务方案及其关键技术研究[J].计算机工

程,2013.39(1):126-127

上一篇:HPV疫苗,时尚还是必需? 下一篇:租赁模式是长远的考虑