摘 要:P2P是一種依賴網(wǎng)絡(luò)中參與者的計(jì)算能力和帶寬而不把依賴都聚集在較少的幾臺服務(wù)器上的網(wǎng)絡(luò)技術(shù)。簡單介紹了集中式、混合式、無結(jié)構(gòu)化分布和結(jié)構(gòu)化分布四種體系結(jié)構(gòu)下流行的P2P網(wǎng)絡(luò)的資源發(fā)現(xiàn)方式,通過實(shí)例分析了各體系下的典型應(yīng)用并總結(jié)了各自的優(yōu)缺點(diǎn)。
關(guān)鍵詞:P2P;體系結(jié)構(gòu);資源發(fā)現(xiàn)
中圖分類號:TP 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3198(2010)06-0274-01
P2P被稱為“對等”技術(shù),它依賴網(wǎng)絡(luò)中參與者的計(jì)算能力和帶寬,而不是把依賴都聚集在較少的幾臺服務(wù)器上。P2P網(wǎng)絡(luò)的目標(biāo)是高效定位資源以實(shí)現(xiàn)節(jié)點(diǎn)信息的有效聚合與共享。其特征:(1)是建立在Internet 上的overlay網(wǎng)絡(luò),是分布式應(yīng)用系統(tǒng),節(jié)點(diǎn)間沒有集中式的控制或者分層結(jié)構(gòu)。(2)節(jié)點(diǎn)間能通過本層路由協(xié)議進(jìn)行對等通信。(3)核心操作是資源的高效、準(zhǔn)確發(fā)現(xiàn)。
P2P系統(tǒng)的資源發(fā)現(xiàn)方式和拓?fù)浣Y(jié)構(gòu)有密切關(guān)系。P2P系統(tǒng)按照其節(jié)點(diǎn)組織方式可以劃分為以下四種體系結(jié)構(gòu)。
1 集中式
集中式P2P網(wǎng)絡(luò)中存在一或多臺中央索引服務(wù)器負(fù)責(zé)提供目錄索引和資源搜索服務(wù)。所有節(jié)點(diǎn)的信息都存儲在中央索引服務(wù)器上,并靠它提供對資源的索引服務(wù)。節(jié)點(diǎn)加入P2P網(wǎng)絡(luò)時,要先向中央索引服務(wù)器注冊,建立索引。請求節(jié)點(diǎn)需要搜索資源時,向該服務(wù)器發(fā)送搜索請求。服務(wù)器根據(jù)請求查詢索引,再將結(jié)果返回給請求節(jié)點(diǎn)。請求節(jié)點(diǎn)收到索引信息后,與索引指出的目標(biāo)節(jié)點(diǎn)聯(lián)系。中央服務(wù)器僅提供目錄服務(wù),系統(tǒng)的關(guān)鍵功能如文件下載或分布式計(jì)算則由分布的單獨(dú)的節(jié)點(diǎn)完成。因此,這類系統(tǒng)并不是純P2P系統(tǒng),而是混合P2P系統(tǒng)。Napster就是這種網(wǎng)絡(luò)的典型代表。
Napster由兩部分組成,Napster網(wǎng)站和Napster節(jié)點(diǎn)。Napster網(wǎng)站是服務(wù)器機(jī)群,每個服務(wù)器保存部分用戶共享文件索引信息,所有服務(wù)器整合起來對外面的用戶提供服務(wù)。每個用戶連接到機(jī)群中的一臺服務(wù)器。服務(wù)器記錄相連用戶的共享文件信息和用戶位置,并做成索引添加到索引表中。當(dāng)用戶想要查詢某文件時,將query發(fā)送給與其相連的服務(wù)器,該服務(wù)器收到query后,與其它服務(wù)器協(xié)作處理,處理完成后將response返回給用戶,response包含所有查到的匹配文件的索引,用戶可以根據(jù)相應(yīng)機(jī)制選擇需要的文件,并根據(jù)索引中文件所對應(yīng)的位置跟相應(yīng)用戶直接建立連接。
2 混合式
混合式P2P網(wǎng)絡(luò)中節(jié)點(diǎn)被分成了超級節(jié)點(diǎn)和普通節(jié)點(diǎn)。超級節(jié)點(diǎn)由具有良好性能及網(wǎng)絡(luò)帶寬的計(jì)算機(jī)擔(dān)任,而普通節(jié)點(diǎn)與超級節(jié)點(diǎn)相聯(lián)接。超級節(jié)點(diǎn)之間形成純粹的P2P網(wǎng)絡(luò),而普通節(jié)點(diǎn)圍繞在作為主干的超級節(jié)點(diǎn)周圍。普通節(jié)點(diǎn)加入P2P網(wǎng)絡(luò)時,將選擇一個超級節(jié)點(diǎn)作為Hub節(jié)點(diǎn),并向超級節(jié)點(diǎn)注冊自己的共享資源信息,而普通節(jié)點(diǎn)需要查找共享資源時,就向Hub節(jié)點(diǎn)提交請求,由Hub節(jié)點(diǎn)負(fù)責(zé)查找。典型代表就是KaZaa網(wǎng)絡(luò)。
KaZaa網(wǎng)絡(luò)中,選擇性能較高的節(jié)點(diǎn)作為超級節(jié)點(diǎn),各超級節(jié)點(diǎn)之間形成非結(jié)構(gòu)化拓?fù)洌總€超級節(jié)點(diǎn)與一些普通節(jié)點(diǎn)形成集中式拓?fù)洌疵總€超級節(jié)點(diǎn)采用“文件索引”將文件標(biāo)識符映射其相應(yīng)的位置,這些文件索引分布在KaZaa超級節(jié)點(diǎn)中,每個節(jié)點(diǎn)為其所有的子普通節(jié)點(diǎn)共享的文件保存本地索引。KaZaa超級節(jié)點(diǎn)很像一臺Napster服務(wù)器,不同處在于KaZaa超級節(jié)點(diǎn)不恒定,非永久。搜索發(fā)現(xiàn)算法在超級節(jié)點(diǎn)間轉(zhuǎn)發(fā),超級節(jié)點(diǎn)再將查詢信息轉(zhuǎn)發(fā)給適當(dāng)終端節(jié)點(diǎn)。
3 無結(jié)構(gòu)化分布式
無結(jié)構(gòu)化分布式P2P系統(tǒng)采用去中心化的全分布式資源索引管理結(jié)構(gòu)和通信模式,用戶和資源在系統(tǒng)中隨機(jī)分布和組織,對共享資源的查找只能通過鄰居轉(zhuǎn)交的方式進(jìn)行。各節(jié)點(diǎn)都要維護(hù)一定數(shù)量的鄰節(jié)點(diǎn)信息,要查找資源時,給鄰居發(fā)送查詢消息,每個收到查詢消息的節(jié)點(diǎn)首先自檢共享內(nèi)容,察看是否匹配,如存在匹配資源則返回結(jié)果,如無匹配資源則將查詢消息轉(zhuǎn)發(fā)給鄰居,如此重復(fù),直到找到所需的資源。其中Gnutella是最具代表性的。
Gnutella網(wǎng)絡(luò)中所有節(jié)點(diǎn)都是對等的,各節(jié)點(diǎn)間直接通信,一個新節(jié)點(diǎn)首先訪問某特殊站點(diǎn)提供“主機(jī)緩存服務(wù)”得到活動地址將自己接入到Gnutella網(wǎng)絡(luò),之后該節(jié)點(diǎn)通過探測網(wǎng)絡(luò)中其它對等機(jī)找到鄰節(jié)點(diǎn)。查找時,該節(jié)點(diǎn)先向所有鄰節(jié)點(diǎn)發(fā)送查詢消息,其它節(jié)點(diǎn)接收到該消息后檢查本地是否有符合查詢請求的內(nèi)容,如有則按查詢消息發(fā)送的路徑返回一個查詢響應(yīng),無論本地是否有符合查詢的內(nèi)容,其它節(jié)點(diǎn)都會將查詢包以洪泛的方式在網(wǎng)絡(luò)中繼續(xù)傳遞,直到TTL的值為0時才停止轉(zhuǎn)發(fā)。
4 結(jié)構(gòu)化分布式
由于非結(jié)構(gòu)化P2P網(wǎng)絡(luò)的拓?fù)鋱D是隨機(jī)圖,資源分布沒有很強(qiáng)的規(guī)律性,系統(tǒng)的可擴(kuò)展性受到嚴(yán)重限制,后來提出了結(jié)構(gòu)化P2P網(wǎng)絡(luò)。結(jié)構(gòu)化P2P網(wǎng)絡(luò)基于確定的拓?fù)鋱D,主要采用分布式哈希(DHT)路由技術(shù),它通過分布式哈希函數(shù)將輸入的關(guān)鍵字唯一映射到某節(jié)點(diǎn)上,然后通過某些路由算法同該節(jié)點(diǎn)建立連接。基于DHT的P2P網(wǎng)絡(luò)稱為結(jié)構(gòu)化P2P網(wǎng)絡(luò)。下面以Tapestry為例討論:
在Tapestry網(wǎng)中每個結(jié)點(diǎn)都有自己的標(biāo)識nodeID,每個數(shù)據(jù)對象也有其標(biāo)識objectlD,每條消息也有其特定應(yīng)用的AID(applicationID),通過AID可以區(qū)分應(yīng)用類型。Tapestry中,由一個稱之為對象的“root”結(jié)點(diǎn)來負(fù)責(zé)數(shù)據(jù)對象。理想情況下,找到一個nodeID與對象的objectID相等的結(jié)點(diǎn),則有root(objectID)=nodeID,但這種情況很少發(fā)生,此時有root(objectID)=最接近objectID的nodeID。為提高對另面視前一篇情況可加可不加
作者簡介:顧晨,襄樊職業(yè)技術(shù)學(xué)院經(jīng)濟(jì)管理學(xué)院,助理講師。象的可用性和持久性,Tapestry可通過多個散列值給一個對象制定多個root結(jié)點(diǎn)。Tapestry的路由算法為,當(dāng)前結(jié)點(diǎn)選擇下一跳時,nodeID與objectID進(jìn)行后綴匹配,最匹配的為下一跳,如:XXX3一>XX53一>X253一>7253(X表示任意數(shù)字)每個Tapestry結(jié)點(diǎn)都要維護(hù)一個層次結(jié)構(gòu)的“路由表”以適應(yīng)后綴匹配路由規(guī)則,路由表中每一層的結(jié)點(diǎn)都要與自身nodeID匹配一定位數(shù)后綴。通過上述路由表,Tapestry的后綴匹配路由策略變得高效、容錯。一般路由的第m跳所到達(dá)的結(jié)點(diǎn)至少與目的結(jié)點(diǎn)ID的m位后綴相匹配。
P2P網(wǎng)絡(luò)資源發(fā)現(xiàn)的每種方式都有自己的優(yōu)缺點(diǎn)和應(yīng)用場合。
集中式的優(yōu)點(diǎn)是簡單。因?yàn)橘Y源發(fā)現(xiàn)可以由中央目錄來實(shí)現(xiàn),所以非常靈活、高效。但由于集中式P2P網(wǎng)絡(luò)與傳統(tǒng)的C/S結(jié)構(gòu)類似,中心服務(wù)器成為整個系統(tǒng)的瓶頸,易造成單點(diǎn)失效、網(wǎng)絡(luò)熱點(diǎn)、訴訟、可擴(kuò)展性差等問題,同時也易導(dǎo)致技術(shù)失效或成為惡意攻擊的目標(biāo)。如果服務(wù)器因?yàn)槟承┰蚴В瑒tP2P網(wǎng)絡(luò)可能全面崩潰。
混合式是在純P2P網(wǎng)絡(luò)基礎(chǔ)上引入了一定程度的集中化處理,由于引入了局部中心的概念,混合式P2P網(wǎng)絡(luò)也在一定程度上存在中心點(diǎn)問題,作為局部中心的超級節(jié)點(diǎn)易于受到攻擊,容錯性也受到影響,繼而給樹葉節(jié)點(diǎn)帶來影響;另外普通節(jié)點(diǎn)需要定期更新在Hub節(jié)點(diǎn)上的共享資源信息,這些更新的開銷也較大。
無結(jié)構(gòu)化分布式容錯性好能夠較快發(fā)現(xiàn)目的節(jié)點(diǎn),支持復(fù)雜的查詢,抗“抖動”性強(qiáng)。洪泛方法發(fā)布請求、搜尋資源,具有較高的穩(wěn)定性,但大部分情況下效率較低,定位稀疏資源困難,系統(tǒng)的擴(kuò)展性差。
結(jié)構(gòu)化分布式的最大優(yōu)點(diǎn)是能在O(logN)( N為系統(tǒng)中節(jié)點(diǎn)的數(shù)目)的跳數(shù)之內(nèi)完成文檔的路由和定位,便于資源查找,減小開銷。出于冗余度以及延時的考慮,大部分基于DHT的P2P系統(tǒng)總是在節(jié)點(diǎn)的虛擬標(biāo)識與關(guān)鍵字最接近的節(jié)點(diǎn)上備份冗余信息,避免了單一節(jié)點(diǎn)失效的問題。但結(jié)構(gòu)化的資源組織方式由于要維持嚴(yán)密的結(jié)構(gòu),其維護(hù)開銷遠(yuǎn)高于無結(jié)構(gòu)化P2P網(wǎng)絡(luò),節(jié)點(diǎn)退出網(wǎng)絡(luò)或崩潰帶來的危害也遠(yuǎn)高于無結(jié)構(gòu)化P2P網(wǎng)絡(luò)。為了對抗網(wǎng)絡(luò)動態(tài)性,增強(qiáng)網(wǎng)絡(luò)彈性,結(jié)構(gòu)化P2P網(wǎng)絡(luò)都設(shè)計(jì)了專門的方法來對付節(jié)點(diǎn)崩潰,但這些方法導(dǎo)致了更大的開銷。DHT之后,P2P網(wǎng)絡(luò)節(jié)點(diǎn)間相鄰關(guān)系與實(shí)際物理網(wǎng)絡(luò)并沒有聯(lián)系,產(chǎn)生了拓?fù)涫鋯栴},從而導(dǎo)致資源發(fā)現(xiàn)性能降低。結(jié)構(gòu)化P2P網(wǎng)絡(luò)僅支持精確關(guān)鍵詞匹配查詢,無法支持內(nèi)容/語義等復(fù)雜查詢。
參考文獻(xiàn)
[1]張文,趙子銘.P2P網(wǎng)絡(luò)技術(shù)原理與C++開發(fā)案例[M].北京:人民郵電出版社,2008.