什么是P2P
1点对点技术(peer-to-peer, 简称P2P)又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。P2P网络通常用于通过Ad Hoc连接来连接节点。这类网络可以用于多种用途,各种档案分享软件已经得到了广泛的使用。P2P技术也被使用在类似VoIP等实时媒体业务的数据通信中。
2 P2P是peer-to-peer的缩写,peer在英语里有“(地位、能力等)同等者”、“同事”和“伙伴”等意义。这样一来,P2P也就可以理解为“伙伴对伙伴”的意思,或称为对等联网。目前人们认为其在加强网络上人的交流、文件交换、分布计算等方面大有前途。
简单的说,P2P直接将人们联系起来,让人们通过互联网直接交互。P2P使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间商。P2P就是人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载。P2P另一个重要特点是改变互联网现在的以大网站为中心的状态、重返“非中心化”,并把权力交还给用户。 P2P看起来似乎很新,但是正如B2C、B2B是将现实世界中很平常的东西移植到互联网上一样,P2P并不是什么新东西。在现实生活中我们每天都按照P2P模式面对面地或者通过电话交流
和沟通。
P2P的发展简史
1999年,文件共享系统Napster诞生。Napster是最早的P2P实用系统,参与系统的是大量个人计算机用户,每个用户将自己愿意共享的文件提供出来,同时可以下载其他用户共享的文件。Napster需要解决的核心问题是必须知道哪些机器上有哪些文件,这样当用户提出文件搜索请求时才可以得到正确的匹配结果。
在Napster中使用一个中心服务器,称为目录服务器,存放所有文件的元数据信息(文件的标题和一些简单的描述信息)以及其存放结点的IP地址。结点加入系统时首先要连接目录服务器并报告自身地址及共享的文件列表。用户需要某个文件时向目录服务器提交搜索请求,目录服务器返回符合搜索要求的所有文件的存储地址,之后用户根据对应地址直接从共享此文件的结点处进行文件下载。由于目录服务器只提供索引服务,而不承担文件存储和下载服务,因此它支持上万结点同时在线。Napster在发布后迅速流行起来,很快成为增长最快的网络应用系统。
事实上,Napster中的结点并非全部对等,目录服务器要承担比其它结点繁重得多的工作,从这个意义上说,Naspter并非一个纯粹的对等系统。由于Naspter中的结点动态性很高(指结点的加入、退出很频繁),目录服务器就处在不断的更新之中。并且,目录服务器还要负责响应所有用户的查询请求。因此,当系统规模更大时,目录服务器还是会成为系统的瓶颈。此外,目录服务器的存在成为系统的关键点,也就成为整个系统最易受攻击的要害所在。在Naspter之后的P2P系统都在这一点上进行了重点改进,系统基本上都采用无中心结构,鲁棒性和可扩展性都得到大幅度提高。
Napster在初期取得了巨大成功之后,很快遇到版权问题的困扰。由于Napster上共享的文件有很多是音乐媒体文件,这些音乐媒体在未被授权时是不允许被广泛传播的。而Napster的目录服务器恰恰为这些文件的传播提供了支持,因此Napster很快受到音乐著作方为保护版权而发起的挑战,并于2001年被迫关闭。
Napster第一次验证了P2P思想在广域网范围内的可行性,在Napster关闭之后,更多的P2P文件共享系统迅速崛起,成为Internet发展的一股巨大浪潮,其中最著名的是Gnutella和KaZaA。
从Gnutella到KaZaA
Gnutella对Naspter的体系结构进行了彻底的改变,不再使用中心目录服务器,转而使用全对等结构:每个结点记录多个其它结点的IP地址(称为“指针”),这样整个系统的拓扑就成为一个由指针搭建起来的有向图,通常称这张图为“覆盖网”(Overlay),由于Gnutella的覆盖网中没有规定哪些结点之间必须有指针相连,因此整个覆盖网没有一个有序的结构(比如环形、立方体形、层次结构、树形结构、有向无环图等),被称作“非结构化覆盖网”(Unstructured Overlay)。
当用户需要进行文件搜索时,就在覆盖网上进行广度优先或者深度优先搜索,在搜索到一定的范围后,将得到的匹配搜索条件的结果返回给用户。由于这种搜索不可能遍及整个覆盖网,因此就存在不能搜全的问题。但是这个问题并不严重,因为大多数时候人们总是搜索一些比较热门(popular)的文件,而这些文件在整个系统中往往有很多份,只要搜索的范围不是很小,总可以搜到其中的一份或多份。当然,如何在非结构化覆盖网中搜索不热门的文件也是P2P研究中的一个热点问题,近年来也取得了一些进展。
实际上,这种对搜索完备性的牺牲换来了很高的可扩展性:系统不再有中心结点成为瓶颈,规模可以扩展到上百万甚至上千万结点的规模。并且,由于不存在易受攻击的关键结点,系统的鲁棒性也得到了提高。
KaZaA对Gnutella做了进一步的改进。由于系统中的大多数结点的动态性都很高,因此覆盖网中结点的指针就必须频繁更新,去除掉那些已经离开系统的结点,补入新的在线结点。人们从Napster和Gnutella的实际经验中得知,在P2P文件共享系统中结点的能力差异很大,有的结点能力很强,并且很稳定,每次上线之后能保持很长的在线时间,而更多的结点能力弱,且加入系统后很短时间(很多只有几分钟)就离开系统。这样,KaZaA利用系统中的强结点搭成系统的主干框架,而弱结点附属在临近的强结点上。也就是说:KaZaA把结点分成强、弱两种,强结点之间搭建类似于Gnutella的覆盖网,而弱结点只连接一个或几个强结点,并把自己的元数据(即共享文件的列表)发送给强结点,文件搜索只在强结点上进行。这样KaZaA获得了比Gnutella更高的稳定性和搜索效率。当前,KaZaA的同时在线用户稳定在三百万以上,已成为全球最大的分布式系统。
近期,P2P文件共享系统的版权问题也开始逐步得到解决,Napster在关闭之后被音乐软件
生产商Roxio公司收购,Naspter网络被转而成为合法的软件发布渠道。之后,由于业绩看好,Roxio公司更名为Napster,并于2005年1月在纳斯达克上市。目前,Napster的全球注册用户已超过7000万。
P2P结构的应用和研究
另一方面,P2P文件共享系统的成功促使人们致力于在更多方面开拓P2P结构的应用。其中大文件分发系统BitTorrent和基于覆盖网的IP电话系统Skype最为成功。
传统的文件下载大多使用FTP等协议进行C/S方式的下载。这样,对于一些热点文件就会有很多用户同时需要下载,由于服务器端的带宽有限,就会有很多用户的请求得不到满足,从整体上看,下载效率很低。BitTorrent试图充分利用下载用户之间的带宽进行数据传输,从而减轻服务器负担,提高下载速度和系统的可扩展性(同时下载人数)。BitTorrent的基本策略是:每个用户从服务器上下载一部分数据,各个用户下载的部分不尽相同,之后用户之间互相交换对方没有的数据,最终使所有用户都获得全部数据。BitTorrent在推出之后
迅速流行,由于越来越多的人使用BitTorrent在Internet上进行数据下载,很快使得P2P系统成为网络流量占据50%以上的Internet首要应用。
Skype作为基于覆盖网的IP电话系统提供了比以往通过Internet直接连接的IP电话更好的语音效果,因此受到用户的广泛欢迎。自2003年发布以来,其用户增长速度迅猛,截至2005年2月,Skype的注册用户已达2100万,同时在线用户超过200万。Skype的系统结构基本上类似于KaZaA,当用户之间需要语音通信时,Skype在覆盖网中寻出一条当前带宽最大的覆盖网通路,通过多跳转发的方式进行数据传送。通常情况下,在覆盖网中到的转发通路比起通话两点之间的直接通路质量要好,因此通话过程中语音也就更加清晰流畅。由于Skype的出现和高速发展,越来越多的用户转向IP电话,已经对传统的电信业构成了一定的威胁,而将来Skype这样的基于P2P的IP电话系统很可能会在很大程度上取代传统电话业务成为人们日常通信的基本方式之一。
在P2P系统在产业界迅速发展的同时,研究界也及时跟进,对P2P系统展开了大规模的研究工作。自2000年起,在OSDI、SOSP、大文件发送SIGCOMM、USENIX、HOTOS等系统结构方向的顶级会议上不断出现关于P2P系统的重要研究成果。2001年,学界又召开了新的专门针
对P2P系统的学术会议IPTPS,由于该会议受到各著名院校和研究机构的广泛关注,很快成为P2P研究领域的高峰会议,发表了大批优秀论文,成为P2P研究的风向标。从2002年开始,Berkeley、Stanford等著名大学相继开设了P2P相关的研究生课程,进一步推广了P2P这一新兴的研究方向。
P2P的特点
P2P系统的精神实质是“结点合作”。因此,只要一个系统中没有管理者,所有任务都是依靠结点之间的交换与配合完成,这个系统就可以认为是P2P系统。总体上看,已有的P2P系统可以分为两类:
第一类称为“P2P服务系统”(Service-Oriented P2P Systems),P2P服务系统用对等的方式将广域网中的服务结点组织起来,向用户提供更强大、更可靠的服务(数据服务、计算服务、存储服务等),这一类系统包括图书馆资料合作维护系统LOCKSS、广域网分布式实验平台PlanetLab、P2P存储服务系统Ivy等等;
第二类称为“P2P交换系统”(Barter-Oriented P2P Systems)。P2P交换系统为Internet中的大量终端用户搭建资源交换的平台,用户可以在此平台上进行资源交换,所交换的资源可以是文件、数据块、存储空间等。这一类系统包括文件共享系统KaZaA、大文件分发系统BitTorrent、P2P存储交换系统Pastiche等等。
无论是P2P服务系统还是P2P交换系统都面临着很多在传统的分布式系统中没有的新问题:
结点数量大。
很多P2P系统已经达到上百万结点同时在线的规模,这样大的规模导致的一个直接后果是不可能使用全连接的拓扑结构(就是让每个结点记录当前所有的其它结点)。这样一来,如果让结点知道更多其它结点的信息并保证任意两个结点之间能够通信就成为一个棘手的问题。因此,P2P系统中的结点信息收集算法和覆盖网路由协议就成为P2P研究的一个重要方向。
结点动态性高。
对于用户来说,使用P2P系统的一个标准模式是“进入系统-查资源-获得资源-离开系统”,这一过程通常时间不会很长,因此P2P系统的一个显著特点就是结点的平均在线时间短,实验测算,在Napster和Gnutella系统中结点的平均在线时间仅为2个多小时。结点的高动态性使得维护数据可用性的工作变得非常困难。
结点异构性强。
Internet中结点的硬件能力不同、接入方式不同。这就造成了参与P2P系统的结点在存储能力、计算能力和带宽能力上都有着很大差异,如何利用这种异构性把所有结点的可用资源都充分利用起来以提高系统各方面性能是P2P系统必须仔细研究的问题。
结点分布广泛。
P2P系统的结点在全球范围内分布,由于时区不同,系统的不同部分会在不同时间处于繁忙状态。这对负载平衡、任务迁移、复制策略等方面都提出了新的挑战。
网络异步性强。
传统分布式系统在集或者局域网的范围内部署,网络属于同步网(Synchronous Network),也就是说任意两个结点之间的通信延迟总有上限。而P2P系统部署在Internet这一异步网(Asynchronous Network)中,由于网络经常发生阻塞、扰动、分裂等情况,不能保证系统中任意两点的通信延迟有确定的上限。网络的异步性给一些需要严格语义的应用造成了很大困难。例如:复制算法在异步网中就不能保证严格的线性一致性(Linearizability)。那么如何在Internet环境下对于各种操作保证尽量强的可靠性和一致性就需要仔细的分析和研究。
发布评论