Peer-To-Peer 网络介绍

最近几年,Peer-to-Peer (对等计算,简称P2P) 迅速成为计算机界关注的热门话题之一,财富杂志更将P2P列为影响Internet未来的四项科技之一。

“Peer”在英语里有“对等者”和“伙伴”的意义。因此,从字面上,P2P可以理解为对等互联网。国内的媒体一般将P2P翻译成“点对点”或者“端对端”,学术界则统一称为对等计算。P2P可以定义为:网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源(服务和内容)提供者(Server),又是资源获取者(Client)。

客观地说,这种计算模式并不是什么新技术,自从上个世纪70年代网络产生以来就存在了,只不过当时的网络带宽和传播速度限制了这种计算模式的发展。90年代末,随着高速互联网的普及、个人计算机计算和存储能力的提升,P2P技术重新登上历史舞台并且带来了一场技术上的革命。许多基于P2P技术的杀手级应用应运而生,给人们的生活带来了极大的便利。

从计算模式上来说,P2P打破了传统的Client/Server (C/S)模式,在网络中的每个结点的地位都是对等的。每个结点既充当服务器,为其他结点提供服务,同时也享用其他结点提供的服务。P2P与C/S模式的对比如下图所示:

图1 Client/Server模式

图2 Peer to Peer 模式

P2P技术的特点体现在以下几个方面[1]:

  • 非中心化:网络中的资源和服务分散在所有结点上,信息的传输和服务的实现都直接在结点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。P2P的非中心化基本特点,带来了其在可扩展性、健壮性等方面的优势
  • 可扩展性:在P2P网络中,随着用户的加入,不仅服务的需求增加了,系统整体的资源和服务能力也在同步地扩充,始终能比较容易地满足用户的需要。理论上其可扩展性几乎可以认为是无限的。例如:在传统的通过FTP的文件下载方式中,当下载用户增加之后,下载速度会变得越来越慢,然而P2P网络正好相反,加入的用户越多,P2P网络中提供的资源就越多,下载的速度反而越快。
  • 健壮性:P2P架构天生具有耐攻击、高容错的优点。由于服务是分散在各个结点之间进行的,部分结点或网络遭到破坏对其它部分的影响很小。P2P网络一般在部分结点失效时能够自动调整整体拓扑,保持其它结点的连通性。P2P网络通常都是以自组织的方式建立起来的,并允许结点自由地加入和离开。
  • 高性价比:性能优势是P2P被广泛关注的一个重要原因。随着硬件技术的发展,个人计算机的计算和存储能力以及网络带宽等性能依照摩尔定理高速增长。采用P2P架构可以有效地利用互联网中散布的大量普通结点,将计算任务或存储资料分布到所有结点上。利用其中闲置的计算能力或存储空间,达到高性能计算和海量存储的目的。目前,P2P在这方面的应用多在学术研究方面,一旦技术成熟,能够在工业领域推广,则可以为许多企业节省购买大型服务器的成本。
  • 隐私保护: 在P2P网络中,由于信息的传输分散在各节点之间进行而无需经过某个集中环节,用户的隐私信息被窃听和泄漏的可能性大大缩小。此外,目前解决Internet隐私问题主要采用中继转发的技术方法,从而将通信的参与者隐藏在众多的网络实体之中。在传统的一些匿名通信系统中,实现这一机制依赖于某些中继服务器节点。而在P2P中,所有参与者都可以提供中继转发的功能,因而大大提高了匿名通讯的灵活性和可靠性,能够为用户提供更好的隐私保护。
  • 负载均衡: P2P 网络环境下由于每个节点既是服务器又是客户机,减少了对传统C/S结构服务器计算能力、存储能力的要求,同时因为资源分布在多个节点,更好的实现了整个网络的负载均衡。

与传统的分布式系统相比,P2P技术具有无可比拟的优势。同时,P2P技术具有广阔的应用前景。目前,Internet上各种P2P应用软件层出不穷,用户数量急剧增加。据统计,自2001年以来,大量P2P软件的用户使用数量从几十万、几百万到上千万急剧增加,给Internet带宽带来巨大冲击。如图3所示,在全球最大的开源网站Sourceforge[2]的下载排名中,前十名中有七个项目是基于P2P技术。其中eMule的下载量超过2亿次,Azureus的下载量超过1亿次。这个网站上的工程项目下载量,往往反映当今软件技术的前沿热点。令人瞩目的是,微软公司在新一代操作系统Windows Vista中也加入了P2P技术以用来加强协作和应用程序之间的通讯[3]。

图3 Sourceforge的工程下载排名(数据截止到2006年8月23日)

目前,P2P计算技术正不断应用到军事领域,商业领域,政府信息,通讯等领域。根据具体应用不同,可以把P2P分为大致以下这些类型:

  • 文件内容共享和下载,例如NapsterGnutella、eDonkey、eMule、Maze、BT等;
  • 计算能力和存储共享,例如SETI@home、Avaki、Popular Power等;
  • 基于P2P技术的协同与服务共享平台,例如JXTA、Magi、Groove等;
  • 即时通讯工具,包括ICQ、QQ、Yahoo Messenger、MSN Messenger等;
  • P2P通讯与信息共享,例如Skype、Crowds、Onion Routing等;
  • 基于P2P技术的网络电视:沸点、PPStream、 PPLive、 QQLive、 SopCast等。

参考文献

P2P网络的拓扑结构分类

拓扑结构是指分布式系统中各个计算单元之间的物理或逻辑的互联关系,结点之间的拓扑结构一直是确定系统类型的重要依据。目前互联网络中广泛使用集中式、层次式等拓扑结构。Internet本身是世界上最大的非集中式的互联网络,但是九十年代所建立的一些网络应用系统却是完全的集中式的系统,许多Web应用都是运行在集中式的服务器系统上。集中式拓扑结构系统目前面临着过量存储负载、DOS(Denial of Service,拒绝服务)攻击,网络带宽限制等一些难以解决的问题。Peer-to-Peer (简称P2P) 系统主要采用非集中式的拓扑结构,一般来说不存在上述这些难题。根据结构关系可以将P2P系统细分为四种拓扑形式:

  • 中心化拓扑(Centralized Topology);
  • 全分布式非结构化拓扑(Decentralized Unstructured Topology);
  • 全分布式结构化拓扑(Decentralized Structured Topology,也称作DHT网络);
  • 半分布式拓扑(Partially Decentralized Topology)。

其中,中心化拓扑最大的优点是维护简单,资源发现效率高。由于资源的发现依赖中心化的目录系统,发现算法灵活高效并能够实现复杂查询。最大的问题与传统客户机/服务器结构类似,容易造成单点故障,访问的“热点”现象和版权纠纷等相关问题,这是第一代P2P网络采用的结构模式,经典案例就是著名的MP3共享软件Napster[1].

Napster是最早出现的P2P系统之一,并在短期内迅速成长起来。它实质上并非是纯粹的P2P系统,而是通过一个中央索引服务器保存所有Napster用户上传的音乐文件索引和存放位置的信息。它的工作原理如图1所示。当某个用户需要某个音乐文件时,首先连接到Napster中央索引服务器,在服务器上进行检索,服务器返回存有该文件的用户信息,再由请求者直接连到文件的所有者传输文件。Napster首先实现了文件查询与文件传输的分离,有效地节省了中央服务器的带宽消耗,减少了系统的文件传输延时。

图1 Napster的拓扑结构

然而,这种对等网络模型存在以下这些问题:

  • 中央索引服务器的瘫痪容易导致整个网络的崩溃,因此可靠性和安全性较低。
  • 随着网络规模的扩大,对中央索引服务器进行维护和更新的费用将急剧增加,所需成本较高。
  • 中央索引服务器的存在常引起版权问题上的纠纷,服务提供商容易被追究法律责任。

综合上述优缺点,对小型网络而言,中心化拓扑模型在管理和控制方面占一定优势。但鉴于其存在的上述缺陷,该模型并不适合大型网络应用。

全分布式非结构化拓扑的P2P网络是在重叠网络(Overlay Network)(见标注1)采用了随机图的组织方式,结点度数服从Power-law规律(幂次法则)[2],从而能够较快发现目的结点,面对网络的动态变化体现了较好的容错能力,因此具有较好的可用性。同时可以支持复杂查询,如带有规则表达式的多关键词查询,模糊查询等,采用这种拓扑结构最典型的案例便是Gnutella(音译:纽特拉)。准确地说,Gnutella不是特指某一款软件,而是指遵守Gnutella协议[3]的网络以及客户端软件的统称。目前基于Gnutella网络的客户端软件非常多,著名的有ShareazaLimeWire和BearShare等。

图2Gnutella的拓扑结构和文件检索方法

Gnutella和Napster最大的区别在于Gnutella是更加纯粹的P2P系统,因为它没有中央索引服务器,每台机器在Gnutella网络中是真正的对等关系,既是客户机同时又是服务器,所以被称为对等机(Servent,Server+Client的组合)。在文件检索方面,它与Napster也不相同。在Gnutella网络的发展初期,它主要采用基于完全随机图的Flooding搜索算法。图2 显示了Flooding的工作流程:当一台计算机要下载一个文件,它首先以文件名或者关键字生成一个查询,并把这个查询发送给与它相连的所有计算机,这些计算机如果存在这个文件,则与查询的机器建立连接,如果不存在这个文件,则继续在自己相邻的计算机之间转发这个查询,直到找到文件为止。为了控制搜索消息不至于永远这样传递下去,一般通过TTL (Time To Live)的减值来控制查询的深度。

但是,随着联网节点的不断增多,网络规模不断扩大,通过这种Flooding方式定位对等点的方法将造成网络流量急剧增加,从而导致网络中部分低带宽节点因网络资源过载而失效。所以在初期的Gnutella网络中,存在比较严重的分区,断链现象。也就是说,一个查询访问只能在网络的很小一部分进行,因此网络的可扩展性不好。所以,后来许多研究人员在Flooding的基础上作了许多改进,例如采用Random work [4]、Dynamic Query[5]等方法。

由于非结构化网络将重叠网络认为是一个完全随机图,结点之间的链路没有遵循某些预先定义的拓扑来构建。这些系统一般不提供性能保证,但容错性好,支持复杂的查询,并受结点频繁加入和退出系统的影响小。但是查询的结果可能不完全,查询速度较慢,采用Flooding查询的系统对网络带宽的消耗非常大,并由此带来可扩展性差等问题。

全分布式结构化拓扑的P2P网络主要是采用分布式散列表(Distributed Hash Table, 简写成DHT)技术来组织网络中的结点。DHT是一个由广域范围大量结点共同维护的巨大散列表。散列表被分割成不连续的块,每个结点被分配给一个属于自己的散列块,并成为这个散列块的管理者。通过加密散列函数,一个对象的名字或关键词被映射为128位或160位的散列值。分布式散列表起源于SDDS(Scalable Distribute Data Structures)[6]研究,Gribble等实现了一个高度可扩展,容错的SDDS集群。DHT类结构能够自适应结点的动态加入/退出,有着良好的可扩展性、鲁棒性、结点ID分配的均匀性和自组织能力。由于重叠网络采用了确定性拓扑结构,DHT可以提供精确的发现。只要目的结点存在于网络中DHT总能发现它,发现的准确性得到了保证,最经典的案例是Tapestry,Pastry,Chord和CAN。

Tapestry [7]提供了一个分布式容错查找和路由基础平台,在此平台基础之上,可以开发各种P2P应用(OceanStore[8]即是此平台上的一个应用)。Tapestry的思想来源于Plaxton。在Plaxton中,结点使用自己所知道的邻近结点表,按照目的ID来逐步传递消息。Tapestry基于Plaxton的思想,加入了容错机制,从而可适应P2P的动态变化的特点。OceanStore是以Tapestry为路由和查找基础设施的P2P平台。它是一个适合于全球数据存储的P2P应用系统。任何用户均可以加入OceanStore系统,或者共享自己的存储空间,或者使用该系统中的资源。通过使用复制和缓存技术,OceanStore可提高查找的效率。最近,Tapestry为适应P2P网络的动态特性,作了很多改进,增加了额外的机制实现了网络的软状态(soft state),并提供了自组织、鲁棒性、可扩展性和动态适应性,当网络高负载且有失效结点时候性能有限降低,消除了对全局信息的依赖、根结点易失效和弹性差的问题。

Pastry 是微软研究院提出的可扩展的分布式对象定位和路由协议,可用于构建大规模的P2P系统。如图3 所示,在Pastry中,每个结点分配一个128位的结点标识符号(nodeID) ,所有的结点标识符形成了一个环形的nodeID空间,范围从0到2128 - 1 ,结点加入系统时通过散列结点IP地址在128位nodeID空间中随机分配。网络结点的加入与退出,资源查询的过程可以参考文献[9]。

图3Pastry的消息路由

Chord [10]项目诞生于美国的麻省理工学院。它的目标是提供一个适合于P2P环境的分布式资源发现服务,它通过使用DHT技术使得发现指定对象只需要维护O(logN)长度的路由表。在DHT技术中,网络结点按照一定的方式分配一个唯一结点标识符(Node ID) ,资源对象通过散列运算产生一个唯一的资源标识符(Object ID) ,且该资源将存储在结点ID与之相等或者相近的结点上。需要查找该资源时,采用同样的方法可定位到存储该资源的结点。因此,Chord的主要贡献是提出了一个分布式查找协议,该协议可将指定的关键字(Key) 映射到对应的结点(Node) 。从算法来看,Chord是相容散列算法的变体。

图4 Chord的拓扑形状

CAN(Content Addressable Networks)[11] 项目采用多维的标识符空间来实现分布式散列算法。CAN将所有结点映射到一个n维的笛卡尔空间中,并为每个结点尽可能均匀的分配一块区域。CAN采用的散列函数通过对(key, value) 对中的key进行散列运算,得到笛卡尔空间中的一个点,并将(key, value) 对存储在拥有该点所在区域的结点内。CAN采用的路由算法相当直接和简单,知道目标点的坐标后,就将请求传给当前结点四邻中坐标最接近目标点的结点。CAN是一个具有良好可扩展性的系统,给定N个结点,系统维数为d,则路由路径长度为O(n1/d) ,每结点维护的路由表信息和网络规模无关为O(d) 。

上述四种基于DHT的P2P系统的性能比较可以参照[12]。DHT这类结构最大的问题是DHT的维护机制较为复杂,尤其是结点频繁加入退出造成的网络波动(Churn)会极大增加DHT的维护代价。DHT所面临的另外一个问题是DHT仅支持精确关键词匹配查询,无法支持内容/语义等复杂查询。

半分布式拓扑结构(有的文献亦称作混杂模式,英文表达为Hybrid Structure)吸取了中心化结构和全分布式非结构化拓扑的优点,选择性能较高(处理、存储、带宽等方面性能)的结点作为超级结点(英文表达为SuperNodes或者Hubs),在各个超级结点上存储了系统中其他部分结点的信息,发现算法仅在超级结点之间转发,超级结点再将查询请求转发给适当的叶子结点。半分布式结构也是一个层次式结构,超级结点之间构成一个高速转发层,超级结点和所负责的普通结点构成若干层次。采用这种结构的最典型的案例就是KaZaa

图5 半分布式拓扑结构(网络中包含Super Node)

KaZaa是当前世界最流行的几款P2P文件共享软件之一。根据CA公司统计,全球KaZaa的下载量超过2.5亿次。使用KaZaa软件进行文件传输消耗了互联网40%的带宽。之所以它如此的成功,是因为它结合了Napster和Gnutella共同的优点。从结构上来说,它使用了Gnutella的全分布式的结构,这样可以是系统更好的扩展,因为它无需中央索引服务器存储文件名,它是自动的把性能好的机器成为SuperNode,它存储着离它最近的叶子节点的文件信息,这些SuperNode,再连通起来形成一个Overlay Network. 由于SuperNode的索引功能,使搜索效率大大提高。

图6 KaZaa的软件界面

半分布式结构的优点是性能、可扩展性较好,较容易管理,但对超级点依赖性大,易于受到攻击,容错性也受到影响。

在实际应用中,每种拓扑结构的P2P网络都有其优缺点,下表从可扩展性、可靠性、可维护性、发现算法的效率、复杂查询等方面比较了这四种拓扑结构的综合性能。

比较标准/拓扑结构

中心化拓扑

全分布式非结构化拓扑

全分布式结构化拓扑

半分布式拓扑

可扩展性

可靠性

可维护性

最好

最好

发现算法效率

最高

复杂查询

支持

支持

不支持

支持

参考文献:

(标注1)Several connected hosts using the same communication protocol are forming an overlay network that uses an underlying physical network infrastructure.

P2P搜索技术的研究与挑战

随着P2P应用的蓬勃发展,作为P2P应用中核心问题的搜索技术备受关注。本文将介绍主要的P2P搜索技术以及对搜索技术产生影响的一些因素和挑战。

一、DHT网络(结构化P2P网络)的搜索技术

  1. 网络链路长度与度的关系

基于分布式Hash表的P2P系统包括CAN, Pastry, Tapestry ,Chord等,它们的路由和查询方法前面已经作介绍,这里不再赘述。这些系统建立在确定性拓扑结构的基础上,从而表现出对网络中路由的指导性和网络中结点与数据管理的较强控制力。但是,对确定性结构的认识又限制了搜索算法效率的提升。研究分析了目前基于DHT的搜索算法,发现衡量搜索算法的两个重要参数度数(表示节点的邻居关系数)和链路长度(搜索算法的平均路径长度)之间存在渐进曲线的关系,如图1所示。

图1 度数和直径之间的渐进曲线关系

在N个结点网络中,图中直观显示出当度数为N时,搜索算法的直径为O(1);当每个结点仅维护一个邻居时,搜索算法的直径为O(N)。这是度数和直径关系的两种极端情况。同时,研究分析了O(d)的度和O(d)的直径的算法是不可能的。

从渐进曲线关系可以看出,如果想获得更短的路径长度,必然导致度数的增加;而网络实际连接状态的变化造成大度数邻居关系的维护复杂程度增加。另外,研究者证明O(logN)甚至O(logN/loglogN)的平均路径长度也不能满足状态变化剧烈的网络应用的需求。新的搜索算法受到这种折衷关系制约的根本原因在于DHT对网络拓扑结构的确定性认识。

  1. 语义查询和DHT的矛盾

现有DHT算法由于采用分布式散列函数,所以只适合于准确的查找,如果要支持目前Web上搜索引擎具有的多关键字查找的功能,还要引入新的方法。主要的原因在于DHT的工作方式。

基于DHT的P2P系统采用相容散列函数根据精确关键词进行对象的定位与发现。散列函数总是试图保证生成的散列值均匀随机分布,结果两个内容相似度很高但不完全相同的对象被生成了完全不同的散列值,存放到了完全随机的两个结点上。因此,DHT可以提供精确匹配查询,但是支持语义是非常困难的。

目前在DHT基础上开展带有语义的资源管理技术的研究还非常少。由于DHT的精确关键词映射的特性决定了无法和信息检索等领域的研究成果结合,阻碍了基于DHT的P2P系统的大规模应用。

二、非结构化P2P网络的搜索技术

  1. 小世界模型(Small World)对P2P搜索技术的影响

非结构化P2P搜索技术一直采用洪泛转发(Flooding)的方式,与DHT的启发式搜索算法相比,可靠性差,对网络资源的消耗较大。最新的研究从提高搜索算法的可靠性和寻找随机图中的最短路径两个方面展开。也就是对重叠网络(Overlay Network)的重新认识。其中,小世界模型特征和幂规律证明实际网络的拓扑结构既不是非结构化系统所认识的一个完全随机图,也不是DHT发现算法采用的确定性拓扑结构。实际网络体现的幂规律分布的含义可以简单解释为在网络中有少数结点有较高的“度”,多数结点的“度”较低。度较高的结点同其他结点的联系比较多,通过它找到待查信息的概率较高。

Small world模型的特性:网络拓扑具有高聚集度和短链的特性。在符合Small World特性的网络模型中,可以根据结点的聚集度将结点划分为若干簇(Cluster),在每个簇中至少存在一个度最高的结点为中心结点。大量研究证明了以Gnutella为代表的P2P网络符合Small World特征,也就是网络中存在大量高连通结点,部分结点之间存在“短链”现象。

图2 Gnutella 重叠网络的Small World现象

因此,P2P搜索算法中如何缩短路径长度的问题变成了如何找到这些“短链”的问题。尤其是在DHT搜索算法中,如何产生和找到“短链”是搜索算法设计的一个新的思路。Small World特征的发现和引入会对P2P搜索算法产生重大影响。

  1. 非结构化P2P搜索算法

  按照搜索策略,可以分为两大类:盲目搜索和启发式搜索。盲目搜索通过在网络中传播查询信息并且把这些信息不断扩散给每个节点。通过这种洪泛方式来搜索想要的资源。而启发式搜索在搜索的过程中利用一些已有的信息来辅助查找过程。由于信息搜索对资源的存储有一些知识,所以信息搜索能够比较快的找到资源。

  • Flooding 搜索方法

在最初的Gnutella协议中,使用的是Flooding方法,在网络中,每个节点都不知道其他节点的资源。当它要寻找某个文件,把这个查询信息传递给它的相邻节点,如果相邻节点含有这个资源,就返回一个QueryHit的信息给Requester。如果它相邻的节点都没有命中这个被查询文件,就把这条消息转发给自己的相邻节点。这种方式像洪水在网络中各个节点流动一样,所以叫做Flooding搜索。由于这种搜索策略是首先遍历自己的邻接点,然后再向下传播,所以又称为宽度优先搜索方法(BFS)。如图所示:搜索的节点一开始TTL=3,它每传播一次TTL减1,如果TTL减到0还没有搜索到资源,则停止。如果搜索到资源则返回目标机器的信息以用来建立连接。在搜索过程中可能出现循环,但是由于有TTL控制,所以这个循环不会永远进行下去,当TTL=0的时候自然结束。

图3Flooding 方法示意图

  • Modified-BFS方法

这种方法是在宽度优先方法Flooding上面作了一定修改。跟Flooding搜索方法不同,搜索源只是随机的选取一定比例的相邻节点作为查询信息的发送目标,而不是发送给所有相邻节点。相比于Flooding方法来说,是以时间换取空间的有效尝试。

  • Iterative Deepening搜索方法

迭代递增是Flooding方法的改进,策略循环递增TTL(Time to Live)值,这个值用来控制Flooding的搜索深度。跟Flooding搜索方法给TTL赋一个较大的值不同,这种方法在初始阶段,给TTL一个很小的值,如果在TTL减为0,还没有搜索到资源,则给TTL重新赋更高的值。这种策略可以减少搜索的半径,但是在最坏的情况下,延迟很大,如果P2P网络内重复资源丰富,这种方法在不影响搜索质量的基础上将减少网络内的查询流量,在有的文献中亦称为Expanding Ring(扩展环搜索)。

图4 Iterative Deepening 过程

  • Random Walk搜索方法:

在随机漫步中,请求者发出K个查询请求给随机挑选的K个相邻节点。然后每个查询信息在以后的漫步过程中直接与请求者保持联系,询问是否还要继续下一步。如果请求者同意继续漫步,则又开始随机选择下一步漫步的节点,否则中止搜索。

图5 Random Walk 效果图

  • Gnutella2的搜索方法

Gnutella2建立Super-Node,它存储着离它最近的叶子节点的文件信息,这些SuperNode,再连通起来形成一个Overlay Network.当叶子节点需要查询文件,它首先从它连接的SuperNode的索引中寻找,如果找到了文件,则直接根据文件所存储的机器的IP地址建立连接,如果没有找到,则SuperNode把这个查询请求发给它连接的其他超级节点,直到得到想要的资源,KaZaa,POCO等都是基于这种超级节点的思想。

图6 Gnutella2的SuperNode节点图

  • 基于移动Agent的搜索方法

移动Agent是一个能在异构网络中自主地从一台主机迁移到另一台主机,并可与其他Agent或资源进行交互的程序。Agent非常适合在网络环境中来帮助用户完成信息检索的任务。现在意大利的一些研究人员在移动 Agent 结合P2P方面做了一些前沿的研究,其中的一些想法,就是通过在P2P软件中嵌入Agent的运行时环境。当有节点需要搜索的时候,它发送一个移动Agent 给它相邻的节点,移动Agent记录着它的一些搜索的信息。当这个Agent到达一台新的机器上,然后在这个机器上进行资源搜索任务,如果这台机器上没有它想要的资源,则它把这些搜索的信息传给它的邻节点,如果找到资源,则返回给请求的机器。

  • Query Routing方法

这种方法是一种启发式搜索方法。首先每个Peer给本节点的资源做索引,并且纪录相邻节点的资源信息,当查询到达的时候,可以查询路由表直接定位到资源的位置,而不需要再次转发查询信息。

图7Query Routing方法

三、P2P搜索技术研究的挑战

P2P搜索技术中最重要的研究成果应该是基于Small World理论的非结构化搜索算法和基于DHT的结构化搜索算法。尤其是DHT及其搜索技术为资源的组织与查找提供了一种新的方法,在近年来的P2P研究领域成为热点。

随着P2P系统实际应用的发展,物理网络中影响路由的一些因素开始影响P2P发现算法的效率。一方面,实际网络中结点之间体现出较大的差异,即异质性。由于客户机/服务器模式在Internet和分布式领域十几年的应用和大量种类的电子设备的普及,如手提电脑、移动电话或PDA。这些设备在计算能力、存储空间和电池容量上差别很大。另外,实际网络被路由器和交换机分割成不同的自治区域,体现出严密的层次性。

另一方面,网络波动的程度严重影响搜索算法的效率。网络波动(Churn)包括结点的加入、退出、失败、迁移、并发加入过程、网络分割等。DHT的发现算法如Chord、CAN等都是考虑网络波动的最差情况下的设计与实现。由于每个结点的度数尽量保持最小,这样需要响应的成员关系变化的维护可以比较小,从而可以快速恢复网络波动造成的影响。但是每个结点仅有少量路由状态的代价是发现算法的高延时,因为每一次查找需要联系多个结点,在稳定的网络中这种思路是不必要的。

同时,作为一种资源组织与发现技术必然要支持复杂的查询,如关键词、内容查询等。尽管信息检索和数据挖掘领域提供了大量成熟的语义查询技术,由于DHT精确关键词映射的特性阻碍了DHT在复杂查询方面的应用。

P2P搜索方法一直是研究的热点。一些新的搜索方法不断的涌现,但是,在资源搜索效率和准确定位方面还有很大的改善空间,以及基于P2P技术的搜索引擎要达到现在集中式的搜索引擎Google,百度这样广泛使用还需要一段长时间的努力。

Peer-to-Peer 的应用研究、面临的问题与前景展望

一、国外公司与研究机构研究情况

近年来,随着Napster、KaZaa、BT、eMule这样的基于P2P技术的文件共享软件在Internet上迅速传播,P2P技术在国际国内都引发了研究的新热潮。国外开展P2P研究的学术团体主要包括P2P工作组(P2PWG)、全球网格论坛(GGF)以及各高校的研究小组。P2P工作组成立的主要目的是希望加速P2P计算基础设施的建立和相应的标准化工作。P2PWG成立之后,对P2P计算中的术语进行了统一,也形成相关的草案,但是在标准化工作方面工作进展缓慢。目前P2PWG已经和GGF合并,由该论坛管理P2P计算相关的工作。GGF负责网格计算和P2P计算等相关的标准化工作。

从国外公司对P2P计算的支持力度来看,Microsoft公司、Sun公司和Intel公司投入较大。Microsoft公司成立了Pastry项目组,主要负责P2P计算技术的研究工作,目前开发了基于Pastry的多种应用,包括SCRIBE、PAST、SQUIRREL等。在新一代的Windows Vista操作系统中,也增加了最新的P2P研究成果来支持协同工作(标注1)。在2000年8月,Intel公司宣布成立P2P工作组,正式开展P2P的研究。工作组成立以后,积极与应用开发商合作,开发P2P应用平台。2002年Intel发布了. Net基础架构之上的Accelerator Kit (P2P加速工具包) 和P2P安全API软件包,从而使得微软. NET开发人员能够迅速地建立P2P安全Web应用程序。IBM公司也开展了基于P2P技术的研究,提出了Smart Networking,另外IBM公司大力支持的网格计算(Grid Computing)与P2P计算在许多方面研究类似。

Sun公司以Java技术为背景,开展了JXTA项目。JXTA是基于Java的开源P2P平台,任何个人和组织均可以加入该项目。因此,该项目不仅吸引了大批P2P研究人员和开发人员,而且已经发布了基于JXTA的即时聊天软件包和搜索引擎。JXTA定义了一组核心业务:认证、资源发现和管理。在安全方面,JXTA加入了加密软件包,允许使用该加密包进行数据加密,从而保证消息的隐私、可认证性和完整性。在JXTA核心之上,还定义了包括内容管理、信息搜索以及服务管理在内的各种其它可选JXTA服务。在核心服务和可选服务基础上,用户可以开发各种JXTA平台上的P2P应用。

二、应用研究的分类

P2P实际的应用研究和产品主要体现在以下几个方面:

  • P2P分布式存储系统

P2P分布式存储系统(文件共享与下载)是一个用于对等网络的数据存储系统,它可以提供高效率的、鲁棒的和负载平衡的文件存取功能。对于存储系统,用户关心数据的定位、搜索以及路由的效率,安全性也是重要的因素。集中方式在很多情况下不再适用这种大规模数据存储的要求,这就需要一个新的体系来管理系统中的数据。P2P分布式存储系统就是解决这样的问题。这些研究包括全分布式存储系统:Oceanstore,Past和FreeHaven等。其中,基于超级点结构的半分布式P2P应用如KaZaa、Edonkey、Morpheus、Bit Torrent等也属于P2P共享存储的范畴,并且用户数量急剧增加。Oceanstore和Past都提供了一种有效的广域网存储模型。它们的底层都建立了一个代价上限为logN的路由策略。 Past则是面向一个相对简单而紧凑的概念,它采用Pastry提供的路由机制,试图利用网络中闲置的存储节点建立一个更为完善的存储语义。FreeHaven则建立了一个详细的匿名体系,用来防止潜在的恶意攻击。

  • P2P计算能力的共享

加入对等网络的结点除了可以共享存储能力之外,还可以共享CPU处理能力。目前已经有了一些基于对等网络的计算能力共享系统,比如SETI@home。SETI@home是由加州伯克利大学开展的寻找外星生命的研究计划。它使用P2P技术串联所有参与研究计划的闲置的计算机来执行复杂的运算,用来分析行星的无线电讯号,寻找宇宙可能存在其他外星文明的证据,这些电脑每天平均发挥的效能超过了全球造价最高,运算最快的超级电脑。这种计算能力共享系统还可以用于进行基因数据库检索和密码破解等需要大规模计算能力的应用。

  • P2P协同工作环境

协同工作是指多用户之间利用网络中的协同计算平台互相协同来共同完成计算任务,共享信息资源等。通过采用P2P技术,个人和组织可以随时采用多种方式建立在线、非在线的协同应用环境。协同应用一般包括:实时通信、聊天室、文件共享、语音通讯等基本功能,除了这些基本功能,用户之间还可以共享白板、协同写作、视频会议等。另外,协同有时候还包括工程人员的协作开发软件。例如,JBuilder2006 Java集成开发环境就增加了P2P协同开发的属性。采用P2P技术使协同工作不再需要中心服务器,参与协同工作的计算机可以点对点建立连接。Groove就是基于P2P的协同软件平台,已经被微软公司收购。

  • P2P应用层组播

组播技术(Multicast)是一种针对多点传输和多方协作应用的组通信模型,有高效的数据传输效率,是下一代Internet应用的重要支撑技术。早期的组播技术研究试图在IP层提供组播通信功能,但IP组播的实施涉及到对现有网络基础设施的调整,因此,大规模应用受到限制。随着P2P研究的兴起,基于应用层的组播技术逐渐受到广泛关注。应用层组播协议将组成员节点自组织成重叠网络(Overlay network) ,在主机节点实现组播功能,为数据多点并发传输提供服务。应用层组播是在应用层实现组播功能而不需要网络层的支持,这样就可以避免出现由于网络层迟迟不能部署对组播的支持而使组播应用难以进行的情况。当然,应用层组播也有许多局限:一是端系统对IP网络的了解有限,节点参与组网时,只能通过探测获得一些网络性能参数,选取的逻辑链路难以优化;二是主机不了解IP网络的拓扑结构,只能通过带宽和时延等外在的特性参数,以启发式的方式建立重叠网络,逻辑链路不能较好地利用质量较好的底层网络资源,重叠网络的多条链路可能经过同一条物理链路。

  • Internet间接访问基础结构

为了使Internet更好地支持组播、单播和移动等特性,Internet间接访问基础结构提出了基于汇聚点的通信抽象。在这一结构中,并不把分组直接发向目的结点,而是给每个分组分配一个标识符,而目的结点则根据标识符接收相应的分组。标识符实际上表示的是信息的汇聚点。目的结点把自己想接收的分组的标识符预先通过一个触发器告诉汇聚点,当汇聚点收到分组时,将会根据触发器把分组转发该相应的目的结点。Internet间接访问基础结构实际上在Internet上构成了一个重叠网络,它需要对等网络的路由系统对它提供相应的支持。

  • P2P流媒体技术

传统的分布式多媒体系统一般是基于客户/服务器模式,服务器以单播的方式和每个用户建立连接,由于流媒体服务具有高宽带、持续时间长等特点,随着用户数量的增加,服务器的带宽很快被消耗完,所以以前的网络电视经常出现断断续续,需要不断地进行数据缓冲。为了解决系统的可扩展性,许多研究提出了相应的解决办法,例如IP组播技术来实现Internet上高效的一对多的通信,提高了系统的可扩展性。然而由于IP组播存在种种限制,如很难实现可靠性组播和拥塞控制等,IP组播技术并没有得到广泛的应用。由于P2P网络本身的可扩展性,基于P2P方式的流媒体技术很好的解决了传统流媒体带宽不足的问题。单源的P2P流媒体系统建立在应用层组播技术的基础之上,由一个发送者向多个接收者发送数据,接收者有且只有一个数据源。服务器和所有客户节点组织成组播树,组播树的中间节点接受来自父节点组播的媒体数据,同时将数据以组播的方式传送给子节点。而多源的P2P流媒体传输系统,则是由多个发送者以单播的方式同时向一个接收者发送媒体数据。

  • P2P搜索技术

P2P搜索技术使用户能够深度搜索文档。而且这种搜索无需通过Web服务器,也可以不受信息文档格式和宿主设备的限制,可达到传统目录式搜索引擎无可比拟的深度。目前,集中式搜索引擎谷歌、雅虎 、百度是人们在网络中检索信息资源的主要工具,但这种集中式的搜索引擎远远无法涵盖所有互联网内的共享内容,而P2P搜索技术正好是这种集中式检索的一种良性互补。

简单描述这个过程:每个节点在加入网络的时候,会对存储在本节点上的内容进行索引,以满足本地内容检索的目的。然后按某种预定的规则选择一些节点作为自己的邻居,加入到P2P网络当中去。发起者P提出检索请求q,并将q发送给自己的邻居,P的邻居收到q后,检查本身是否存在查询的信息,如果不存在,转发查询,直到返回结果。

图3 P2P搜索流程

三、国内学术机构研发情况

  • Maze

Maze 是北京大学网络实验室开发的一个中心控制与对等连接相融合的对等计算文件共享系统,在结构上类似Napster,对等计算搜索方法类似于Gnutella。网络上的一台计算机,不论是在内网还是外网,可以通过安装运行Maze的客户端软件自由加入和退出Maze系统。每个节点可以将自己的一个或多个目录下的文件共享给系统的其他成员,也可以分享其他成员的资源。Maze支持基于关键字的资源检索,也可以通过好友关系直接获得。http://maze.tianwang.com/

  • Granary

Granary是清华大学自主开发的P2P存储服务系统。所谓P2P存储服务系统是指存储服务的提供者在Internet中部署一定数量的存储服务器,为用户提供数据存储服务,确保数据的可靠性、可用性、安全性和访问效率;存储服务的使用者按照所存储数据的容量和质量付费。它以“对象”格式存储数据并且支持属性级的数据查询。http://hpc.cs.tsinghua.edu.cn/granary/

  • AnySee

AnySee是华中科大设计研发的视频直播系统。它采用了一对多的服务模式,支持部分NAT和防火墙的穿越,提高了视频直播系统的可扩展性;同时,它利用近播原则、分域调度的思想,使用Landmark路标算法直接建树的方式构建应用层上的组播树,克服了ESM等一对多模式系统由联接图的构造和维护带来的负载影响。

  • WonGoo

WonGoo是中科院计算所研制的一套P2P技术平台,该平台主要为信息安全、网格计算提供支撑技术和试验环境,同时WonGoo的基础部件将在开发完善之后以开放源代码的方式向社会公开。
  WonGoo主要包括两个方面的特色功能:具有强匿名性的P2P通讯(WonGoo-Link),基于内容查找的P2P资源共享(WonGoo-Search)。可以在这两个功能的基础上搭建各种特色化的P2P应用,目前相关的应用还没有具体实现。WonGoo-Link与WonGoo-Search可以分别独立构造并搭建各自的应用。同时,WonGoo-Search底层通讯也可以采用WonGoo-Link协议来实现更安全的应用。

  • 基于IPV6的P2P内容存取应用系统

这是北京大学、清华大学、上海交通大学、浙江大学、华中科技大学、华南理工大学、北京世纪鼎点软件有限公司共同承担的国家CNGI项目的一部分。它主要研究基于智能节点弹性重叠网络技术的内容存取应用中间件系统,在 CNGI 上建设可管理、可控制和可运营的智能节点弹性重叠网络,开发内容存取类应用。http://p2p.grids.cn/

四、国内企业研发的情况

国内企业在P2P的应用领域研究一直与世界同步,开发了众多使用广泛的P2P产品。这些产品主要集中在文件共享与下载,网络流媒体电视等方面。

  • POCO

POCO 是中国领先的免费电影、音乐、动漫等多媒体分享平台,同时在线人数突破数七十万人, 是中国最大的电影音乐动漫分享平台,是有流量控制力的,无中心服务器的第三代 P2P 资源交换平台。POCO提供多点传输、断点续传等技术,来保障传输过程的高效和稳定。

  • OP

OP-又称为Openext Media Desktop,一个网络娱乐内容平台,Napster的后继者,它可以最直接的方式找到您想要的音乐、影视、软件、游戏、图片、书籍以及各种文档,随时在线共享文件容量数以亿计“十万影视、百万音乐、千万图片”。OP整合了Internet Explorer、Windows Media Player、RealOne Player和ACDSee ,是国内的网络娱乐内容平台。

  • PPLive

PPLive是一款用于互联网上大规模视频直播的共享软件。它使用网状模型,有效解决了当前网络视频点播服务的带宽和负载有限问题,实现用户越多,播放越流畅的特性,整体服务质量大大提高。

其他的非常优秀的商业软件包括PP点点通,eMule,BT客户端软件可以访问中国P2P门户网站http://www.ppcn.net/ ,这里不再赘述。

五、面临的问题

  • 知识产权保护

在P2P共享网络中普遍存在着知识产权保护问题。尽管目前Gnutella、Kazaa等P2P共享软件宣传其骨干服务器上并没有存储任何涉及产权保护的内容的备份,而仅仅是保存了各个内容在互联网上的存储索引。但无疑的是,P2P共享软件的繁荣加速了盗版媒体的分发,提高了知识产权保护的难点。美国唱片工业协会RIAA与这些共享软件公司展开了漫长的官司拉锯战,著名的Napster便是这场战争的第一个牺牲者。另一个涉及面很关的战场则是RIAA和使用P2P来交换正版音乐的平民。从2004年1月至今RIAA已提交了1000份有关方面的诉讼。尽管如此,至今每个月仍然有超过150,000,000的歌曲在网络上被自由下载。后Napster时代的P2P共享软件较Napster更具有分散性,也更难加以控制。即使P2P共享软件的运营公司被判违法而关闭,整个网络仍然会存活,至少会正常工作一段时间。
  另一方面,Napster以后的P2P共享软件也在迫切寻找一个和媒体发布厂商的共生互利之道。如何更加合法合理的应用这些共享软件,是一个新时代的课题。毕竟P2P除了共享盗版软件,还可以共享相当多的有益的信息。
  网络社会与自然社会一样,其自身具有一种自发地在无序和有序之间寻找平衡的趋势。P2P技术为网络信息共享带来了革命性的改进,而这种改进如果想要持续长期地为广大用户带来好处,必须以不损害内容提供商的基本利益为前提。这就要求在不影响现有P2P共享软件性能的前提下,一定程度上实现知识产权保护机制。目前,已经有些P2P厂商和其它公司一起在研究这样的问题。这也许将是下一代P2P共享软件面临的挑战性技术问题之一。

  • 网络病毒传播

随着计算机网络应用的深入发展,计算机病毒对信息安全的威胁日益增加。特别是在P2P环境下,方便的共享和快速的选路机制,为某些网络病毒提供了更好的入侵机会。
  由于P2P网络中逻辑相邻的节点,地理位置可能相隔很远,而参与P2P网络的节点数量 又非常大,因此通过P2P系统传播的病毒,波及范围大,覆盖面广,从而造成的损失会很大。
  在P2P网络中,每个节点防御病毒的能力是不同的。只要有一个节点感染病毒,就可以通过内部共享和通信机制将病毒扩散到附近的邻居节点。在短时间内可以造成网络拥塞甚至瘫痪,共享信息丢失,机密信息失窃,甚至通过网络病毒可以完全控制整个网络。
  一个突出的例子就是2003年通过即时通讯软件传播病毒的案例显著增多。包括Symantec公司和McAfee公司的高层技术主管都预测即时通讯软件将会成为网络病毒传播和黑客攻击的主要载体之一。
  随着P2P技术的发展,将来会出现各种专门针对P2P系统的网络病毒。利用系统漏洞,达到迅速破坏、瓦解、控制系统的目的。因此,网络病毒的潜在危机对P2P系统安全性和健壮性提出了更高的要求,迫切需要建立一套完整、高效、安全的防毒体系。

  • 网络带宽问题

P2P文件共享和下载给用户带来了很大便利。然而,随着它的大面积流行,P2P下载流量占用带宽接入的大量资源,被许多ISP视为洪水猛兽。据统计,在一些地方,Internet超过了70%以上的流量被P2P相关应用占据,很多公司和学校不得不封杀P2P端口来阻止这种视频、音频文件传输。这样的下载流量在有时会影响了某些用户使用正常的Web, Email以及视频点播等业务。

  • 安全问题

P2P网络系统的开发,除了涉及传统的安全性的领域:身份识别认证、授权、数据完整性、保密性和不可否认性,还有一系列安全管理问题比较突出:

  • P2P网络没有中心服务器,信息完全共享,这给了使用者很大的自由,但是这也使其陷入“无政府主义”的困境色情影片、暴力影片在这些系统中随处可见,获取完全免费,这样对青少年成长会造成负面影响。
  • 由于P2P系统的复制传播迅速,一些机密文件一旦丢失,在P2P系统只要有一份拷贝,就有可能迅速扩张,造成大面积的影响。
  • 间谍软件已经成为P2P软件的硬伤。例如,P2P软件KaZaa在大面积流行的时候,里面出现了大量的间谍软件,CA公司称:KaZaa 是互联网最具威胁的间谍件。许多使用P2P网络下载的用户被植入间谍软件。

六、发展趋势

在P2P文件共享领域,技术已经比较成熟,这样的软件如eMule,BT,KaZaa,POCO分别培养了自己的用户群。但是,由于基于不同协议的P2P系统资源并不共享,相互隔绝。所以,当前阶段,这一类型软件正处在自由竞争阶段,进入市场的企业无论是规模还是实力,都不相上下。要想在竞争中取胜,下面这些内容必须考虑。怎么样激励用户提供资源?怎么样保障网络里资源高速稳定的下载速度?怎么样去除间谍软件和病毒在系统中的传播?除了这些,还有人气的较量,服务质量的较量,收费与免费的较量。最终研究方向是,P2P网间资源的整合,资源互通,搜索共享。

在P2P协同计算方面,国内企业起步较晚。相关产品还不是很多,而国外例如Groove在这方面已经作了大量的工作,开发了相对成熟的产品。随着协同计算概念的兴起,这方面软件的需求呈现急剧增长的趋势,应该是一片广阔的篮海。而且,这类软件往往是面向企业和政府用户,所以相对于免费的P2P文件共享软件来说,有更好的盈利空间。

在P2P的流媒体技术方面,目前,流媒体传输的研究才刚起步不久,还有许多问题需要解决。由于P2P流媒体系统中节点的行为具有Ad-Hoc性质,如何在动态的系统环境下保证流媒体的服务质量,需要结合流媒体对QoS的要求和网络流量分析等方面的知识,研究高效率、低代价的QoS保障机制。可研究的方向包括:服务节点的选择、节点失效时如何保证流媒体服务的连续以及对多个发送端的传输调度等。

基于P2P技术的VoIP产品Skype的巨大成功给P2P开辟了又一个新的领域。相关专家认为,VOIP的发展目前应该是有两条路,一种是传统电信运营商的路线,即在可管理的IP网上建立IMS平台发展 VoIP话音业务。这种网络是封闭的,可管理的。另外一种是基于现有互联网公众公共P2P VoIP网络。它的特点是开放的,任何人可以自由加入和离开网络,具有分布管理和增长能力,任何设备只要支持标准协议都可以使用。传统电信运营商的利益需求和广大用户的需求成为一个矛盾,但是市场的需求和VOIP 的发展趋势是不可改变的。将来具体采用哪条路,还不确定,还要看发展,看竞争情况。或许会有很多的企业大客户、政府机构等对安全性等有特殊的要求,会采用电信运营商建立的VOIP业务,但是对于广大普通用户来说,基于公共互联网的P2P VoIP网络将是大势所趋。

综上所述,P2P技术正处在发展的春天,基于这项技术的杀手级应用将不断涌现,这些技术将极大地改善了整个IT世界的面貌,可以说是互联网技术的又一次新的革命。

(标注1)著名的P2P协同软件Groove的创始人Ray Ozzie 目前被微软公司任命为首席软件架构师。

作者:中科院计算技术研究所 罗杰文

地址:http://www.intsci.ac.cn/users/luojw/P2P/

Peer-to-Peer 综述的更多相关文章

  1. Peer To Peer——对等网络

    今年的考试.大问题没怎么出现. 就是考英语第二天的下午,发生网络阻塞的现象,不影响大局.可是事出有因,我们还是须要看看是什么影响到了考生抽题.最后查了一圈,发现其它几场的英语考试听力都是19M大小,而 ...

  2. Peer to Peer File Sharing Through WCF

    http://www.codeproject.com/Articles/614028/Peer-to-Peer-File-Sharing-Through-WCF https://github.com/ ...

  3. bittorrent 学习(二) LOG日志和peer管理连接

    代码中的log.h log.c比较简单 void logcmd() 记录命令  int logfile();运行日志的记录 int init_logfile() 开启log文件 源码比较清晰也很简单. ...

  4. 迅雷中Peer连接信息中的状态解释(转)

    在标准 Peer-to-Peer(P2P 点对点网络)中,以"Flags"表示 Peer Status(Peer 状态).其中: D - 正从 Peer 下载(感兴趣:解阻塞)搜索 ...

  5. Fabric1.4源码解析:Peer节点背书提案过程

    以前从来没有写过博客,从这段时间开始才开始写一些自己的博客,之前总觉得写一篇博客要耗费大量的时间,而且写的还是自己已经学会的,觉得没什么必要.但是当开始用博客记录下来的时候,才发现有些学会的地方只是自 ...

  6. Web挖掘技术

      一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不全然的数据集中获取隐含在当中的实用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用.Web 数据 ...

  7. NFC协议学习分享

    很多同学在学习NFC协议的时候,觉得NFC的规范从底层到上层的应有尽有,有点无处下手的感觉.这里就和大家分享下我曾经学习NFC规范的经验.如果有不对的地方,也请各位同学批评指正.NFC Forum中有 ...

  8. Web采矿技术

      一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不全然的数据集中获取隐含在当中的实用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用.Web 数据 ...

  9. Redola.Rpc 的一个小目标

    Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Complete requests: 20000 ...

随机推荐

  1. SharePoint 2013中规划企业搜索体系结构

    摘要:了解如何规划小型.中型或大型企业搜索体系结构. 设置企业搜索体系结构之前,需要仔细规划很多事项.我们将逐步帮助您规划小型.中型或大型企业搜索体系结构. 您是否熟悉 SharePoint 2013 ...

  2. LeetCode——Find Median from Data Stream

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  3. Mysql学习笔记(三)运算符和控制流函数

    本章学习内容: 1.操作符 2.控制流程函数 操作符: i.圆括号.. 简单的介绍一下圆括号,圆括号的使用的目的是规定计算表达式的顺序...这个想必大家都熟悉例如  mysql>select 1 ...

  4. LitePal + Gson + Volley的ORM框架尝试方案

    为了紧跟技术潮流,目前的项目开始采用ORM的思想进行重新设计. 数据库采用轻量级ORM框架LitePal,Json解析采用Gson,网络框架采用Volley. 如果只是单纯的将这些第三方框架引进来,事 ...

  5. 禁用mac Command w

    事情是这样的:历经各种调查,终于定位到了一个bug,正在我准确Command + 数字 切换下iterm2的窗口时,让我懵逼的事情发生了,我们终端不见了,对不见了.心里万马奔腾啊.什么鬼?原来自己误按 ...

  6. java 版的复利计算器(张俊毅 周修文)

    (带有本金的选项卡的意思就是计算你在知道利率.年限和本息的情况下计算本金) 在利率的输入中能限制小数点的输入并且输入字母会被直接去除 每一个选项卡都有复利和单利的计算,并且在你计算之后会立即更新在下面 ...

  7. 译:在ASP.NET MVC5中如何使用Apache log4net 类库来记录日志

    译文出处:http://www.codeproject.com/Articles/823247/How-to-use-Apache-log-net-library-with-ASP-NET-MVC 在 ...

  8. ASP.NET MVC的路由

    好久没写博文了,感觉最近好像少了点动力.唉!这回就看看这个MVC的路由. 说这个路由机制其实不是MVC里面特有的,ASP.NET里面本身就有的,只不过在WebForm里面一般比较少用,而在MVC里就是 ...

  9. ANT自动打包U3D安卓项目研究笔记

    概述 因项目使用Atlassian Stash作为项目源码管理端,且其支持Ant命令自动编译,可使其根据最新的代码自动打包,故产生该研究Ant打包的任务.在此将研究过程及一些相关知识整理记录在此. 本 ...

  10. 无废话WCF入门教程一[什么是WCF]

    http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html wcf技术交流,同学习共进步,欢迎加群:  群号:3981831 ...