1 P2P的概念
P2P的全称为peer to peer,它是近年bai来兴起的du在Internet上实施网络应用的新模式。对于P2P,目前zhi存在着许多不尽相dao同的定义,其中IBM的解释如下:
P2P系统是由若干互联协作的计算机构成,且至少具有如下特征之一:系统依存于边缘化(非中央式服务器)设备的主动协作,每个成员直接从其他成员而不是从服务器的参与中受益;系统成员同时扮演服务器与客户机两种角色;系统应用的用户能够意识到彼此的存在,并构成一个虚拟或实际的群体。
Internet上的传统应用模式为Client/Server模式,而P2P则可视为是Client/Server模式的一种变更,但两者在工作模式上有着明显的区别。本文将在描述Client/Server及P2P工作模式的基础上,对二者在实际应用中的各项性能进行对比。

2 Client/Server的工作模式
在基于Client/Server模式的应用系统中,服务器是整个应用系统的资源存储、用户管理以及数据运算的中心,而每台客户机也各自具有一定的处理功能,两者相互配合共同实现完整的应用。

在Client/Server模式中,客户机与服务器处在完全不同的角色中,其工作模式如下:
(1) 客户机向服务期发送请求
(2) 服务器收到请求,对请求进行处理
(3) 服务器将处理结果返回给客户机
(4) 客户机收到结果,将其以一定格式形成界面表示。
依据其工作模式可知,在Client/Server模式中,客户机对服务器有相当程度的依赖性,绝大部分的运算工作由服务器完成,而客户机则主要完成请求的传递以及界面的表示,服务器与客户机分工不同,界限明显。

3 P2P的工作模式
与Client/Server模式相比,在实施P2P的系统中,服务器与客户端的界限消失或者淡化,系统中每个参与应用的节点均可以以“平等”的方式共享其他节点的共享资源,如cpu 、存储空间等。在P2P系统中,实体一般同时扮演两种角色:客户机和服务器。

从结构上看,P2P系统是分布式的,目前存在两类P2P系统:混杂P2P系统与纯粹P2P系统,前者由客户机与中央服务器构成,其典型案例为Napster,后者则完全由客户机构成,其典型案例为Gnutella
。本文将以Napster及Gnutella为例,分析这两类P2P系统的工作模式。

l Napster(混杂P2P系统)的工作模式
整个系统由客户机与目录服务器(中央服务器)构成,其工作模式如下:
⑴ 户机向目录服务器发送搜索数据包,请求得到其他客户机的网络地址。
⑵ 录服务器收到数据包后,将其他客户机的地址发送给该客户机。
⑶ 客户机依据这些地址,向其他客户机发送请求。
⑷ 对方收到请求后,对之进行处理,将结果返回给发送方。
与传统的Client/Server模式相比,在非纯粹的P2P系统中,中央服务器即目录服务器的功能已被极大的削弱,仅为客户机的寻址提供服务,不再承担主要的运算工作。相反的,系统中的每个客户机均可以作为服务器,接受其他客户机发送的请求,为其他客户机提供服务,整个系统对中央服务器的依赖性明显降低。

l Gnutella(纯粹P2P系统)的工作模式

Gnutella系统完全由客户机构成,下面将以文件下载操作为例对其工作模式进行简单描述:

⑴ 客户机2向所有相邻客户机1、4、3发送搜索数据包,请求客户机1、4、3为其提供文件A的下载服务。
⑵ 客户机1、4、3将客户机2的搜索数据包转发给各自相邻的客户机5、6、7,该转发工作将在接到数据包的后续客户机上持续进行,直至系统中所有客户机均收到该搜索数据包。
⑶ 客户机1、3、4、5、6、7对自身数据进行查找,拥有文件A资源的客户机5、7向客户机2发送响应数据包。
⑷ 客户机2接收到响应数据包,依据规则(如:路径最短规则),选择丛客户机7下载文件A。

根据以上的描述可以看出,在纯粹的P2P系统中,每个客户机自身具有发现其他客户机的能力,客户机不需要通过目录服务器就可以直接获取其他客户机的网络地址,从而从根本上摆脱了对中心服务器的依赖。

4 P2P与Client/Server的性能对比
l 安全性
Client/Server模式:服务器是整个应用系统的资源存储、用户管理以及数据运算中心,只需设立专职的系统管理员,管理服务器的安全,制定对系统中所有用户都适合的策略,就能有效地保障整个系统的安全,安全性较高。
P2P模式:每个客户机都可以作为服务器,即系统中的每个用户都可以各自为政,不似Client/Server那样要受到服务器的约束,系统的安全管理比较困难。对于P2P,目前尚未有十分行之有效的安全解决方案。
l 资源可维护性
Client/Server模式:共享资源的管理模式为集中式,所有共享资源通常都集中存放在服务器上,资源的查找更新较为简单,数据的备份与恢复较易实现,资源可维护性较好。
P2P模式:系统中的任何一台客户机上均可存在共享资源,资源的查找更新比较复杂,数据备份工作也更为困难,可维护性较差。
l 可扩充性

Client/Server模式:随着系统的Client数量的增多,服务端所需要的资源消耗也随之增加,从而导致服务器性能的不断下降,并最终制约了client的数目的增长,系统可扩充性较弱。

P2P模式:每个客户机都具有很强的处理功能,极少依赖或不依赖中央服务器,因此,向系统中添加客户机,不会产生因服务器性能下降而带来的性能瓶颈问题,系统可扩充性强。

l 可持续性

Client/Server模式:由于大部分运算工作由服务端承担,当服务端发生故障时,所有客户端都无法进行正常工作,整个系统将陷于瘫痪之中。

P2P模式:每个客户机均可作为服务器,当某台为其他客户机服务的服务器故障时,其他客户机可承担该服务器的角色,接管发生故障的服务器的工作,可持续性高。

l 共享计算性能

Client/Server模式:客户机共享服务器的计算能力,但服务器的计算能力是有限的,随着客户机数量的增加,每台客户机分享到的计算能力也相应的减少,整个系统的性能下降。

P2P模式:每台客户机的加入都可为系统增加一份计算能力,当越来越多的客户机加入系统时,整个系统的共享计算性能亦会随之增长。

l 网络通讯性能

Client/Server模式:网络通讯主要集中在客户机与服务器之间,客户机与客户机之间一般并无直接交互行为。

P2P模式:对于纯粹的P2P系统,客户机将向系统中的所有节点发送请求包,寻找提供服务的节点,而对于混杂P2P系统,客户机也将首先访问中央服务器,获取其他客户机的地址,而后才能进行类似Client/Server模式的客户机与服务器的数据通讯。较之Client/Server模式,P2P模式需要占用更多的网络带宽,网络通讯更为频繁。

5 结束语

由于P2P与Client/Server的工作模式不同,造成了两者在各项性能上的较大差异。在实际应用中,可根据其各自的性能特点,结合实际情况有针对性的选择系统的工作模式。例如:对于需要强调集中控制、集中管理以及安全性较高的系统,可采用Client/Server模式,而对于强调网络数据的直接共享以及网上直接交互的系统,则应选择P2P模式。