P2P文件共享首先要解決文件定位的問題。理論上,P2P搜索技術(shù)的搜索范圍將在幾秒鐘內(nèi)以幾何級數(shù)增長,幾分鐘內(nèi)就可搜遍幾百萬臺PC上的信息資源。當然,實際環(huán)境中還需要考慮網(wǎng)絡(luò)帶寬以及路由優(yōu)化方面的問題。特別是P2P網(wǎng)絡(luò)規(guī)模比較大以及異構(gòu)網(wǎng)絡(luò)存在、節(jié)點分散且不斷的離開加入所造成的不穩(wěn)定、數(shù)據(jù)種類繁多等特點的存在。因此,設(shè)計高效的搜索機制,快速而準確地找到所需要的數(shù)據(jù),才能使 P2P 網(wǎng)絡(luò)得以廣泛應用。
非結(jié)構(gòu)化P2P 網(wǎng)絡(luò)解決了網(wǎng)絡(luò)結(jié)構(gòu)中心化的問題,擴展性和容錯性較好。但是它采用應用層廣播的協(xié)議,導致消息量過大,網(wǎng)絡(luò)負擔過重,無法得知整個網(wǎng)絡(luò)的拓撲結(jié)構(gòu)或組成網(wǎng)絡(luò)的各對等點的身份,新的對等點進入網(wǎng)絡(luò)時,系統(tǒng)必須向這個對等點提供一個對等點列表,但P2P網(wǎng)絡(luò)的強動態(tài)性決定了這個對等點列表不可能長時間有效,另外這類系統(tǒng)更容易受到垃圾信息,甚至是病毒的惡意攻擊。
P2P常用網(wǎng)絡(luò)搜索技術(shù)分析
Gnutella模型是應用最廣泛的純(非結(jié)構(gòu)化)P2P拓撲結(jié)構(gòu),沒有索引服務器,每一個聯(lián)網(wǎng)計算機在功能上都是對等的,既是客戶機同時又是服務器。查詢信息不是發(fā)送至中央服務器,而是向所有的對等點發(fā)布。不需要向目錄服務器報告共享的信息,而是將請求泛洪到直接相連的鄰居,直到收到響應,或者達到了最大的泛洪步數(shù)。它采用了基于完全隨機圖的洪泛(Flooding)發(fā)現(xiàn)和隨機轉(zhuǎn)發(fā)機制。為了控制搜索消息的傳輸,通過TTL (Time To Live)的減值來實現(xiàn)。這種模型需要很多的網(wǎng)絡(luò)帶寬來進行資源的搜索工作。隨著聯(lián)網(wǎng)節(jié)點的不斷增多,網(wǎng)絡(luò)規(guī)模不斷擴大,通過這種洪泛方式定位對等點的方法將造成網(wǎng)絡(luò)流量急劇增加,從而導致網(wǎng)絡(luò)中部分低帶寬節(jié)點因網(wǎng)絡(luò)資源過載而失效,甚至存在比較嚴重的分區(qū)、斷鏈現(xiàn)象。導致一個查詢訪問只能在網(wǎng)絡(luò)的很小一部分進行,因此網(wǎng)絡(luò)的可擴展性不好。
之后,又出現(xiàn)了其他改進的分布式系統(tǒng),如通過KaZaA引入超級節(jié)點。把查詢請求集中到超級節(jié)點,減少了網(wǎng)絡(luò)帶寬的消耗。相互連接的超級節(jié)點帶有指向各對等點數(shù)據(jù)的指針,而所有的請求通過路由到達超級節(jié)點。但是當查詢率相當高時, P2P系統(tǒng)仍然會出現(xiàn)一些問題:節(jié)點容易過載,系統(tǒng)運行容易出錯。而且隨著系統(tǒng)的增大這個問題就越發(fā)嚴重。
對現(xiàn)有的非結(jié)構(gòu)化P2P網(wǎng)絡(luò)的改進
拓撲自適應
考慮到網(wǎng)絡(luò)的異構(gòu)和各節(jié)點處理能力的不同,用節(jié)點每秒能處理的查詢量來表示節(jié)點的能力。通過計算,獲得各節(jié)點的處理能力,進而避免任何節(jié)點過載以處理更多的查詢,適應不斷增大的系統(tǒng)規(guī)模。
當源節(jié)點發(fā)布消息時,它通過非結(jié)構(gòu)化P2P 網(wǎng)絡(luò)的自適應機制來定位其他的節(jié)點;各節(jié)點之間的聯(lián)系通過3次握手協(xié)議來完成。在源節(jié)點發(fā)送的信息前帶有惟一標識GUID。這一標識是任意產(chǎn)生的16位字符串,它能跟蹤信息的傳輸,并且將反饋信息原路路由回源節(jié)點。每一個節(jié)點都維護一個緩存,其中包含一張其他節(jié)點信息的表,表里有節(jié)點的IP地址,端口號和它們的能力。節(jié)點使用消息交換機制進行主機節(jié)點的信息交換,如果連接某一節(jié)點失敗,則在緩存表中將該節(jié)點標記為死節(jié)點。緩存定期刪除死節(jié)點的記錄。拓撲適應算法的目標是保證網(wǎng)絡(luò)中處理能力強的節(jié)點連接較多的鄰居節(jié)點,并且處理能力低的節(jié)點離能力高的節(jié)點很近。
為了實現(xiàn)這一目標,所有節(jié)點都將各自計算出自己的關(guān)聯(lián)度。關(guān)聯(lián)度不僅決定是否運行拓撲自適應,而且決定了該節(jié)點被使用的頻率。關(guān)聯(lián)度越低就越經(jīng)常使用拓撲適應。用0到1之間的一個值來表示該節(jié)點與其當前鄰居節(jié)點的關(guān)聯(lián)程度。L=0表示關(guān)聯(lián)性很低,L=1表示關(guān)聯(lián)性很高。
如果一個節(jié)點連接的節(jié)點數(shù)低于允許的最小連接數(shù),那么其L=0;如果L<1,將增加節(jié)點來提高L。隨著其鄰居增多,關(guān)聯(lián)程度也將提高,直至接近或到達其處理能力。對于任一節(jié)點X的所有鄰居計算Mi=Ci /i(其中Ci 表示節(jié)點的處理能力,i表示節(jié)點的鄰居數(shù)),則L=∑Mi /Cx ;若求得的L>1.0或X的鄰居數(shù)大于設(shè)置的最大鄰居數(shù),則L=1。
如果X節(jié)點要增加其鄰居,那么它將從它的緩存中任意選擇一些節(jié)點作為其鄰居的候選,從這些任選的節(jié)點中,X將選擇最大處理能力大于它的節(jié)點。如果候選的節(jié)點中沒有滿足這一條件的,它任意從候選節(jié)點中任意選擇一個作為其鄰居。假定被選的備用節(jié)點為Y,X將與Y 進行3次握手,在握手時,網(wǎng)絡(luò)中的每一個節(jié)點將決定是否接受這個新節(jié)點作為其鄰居,根據(jù)該節(jié)點的處理能力、已經(jīng)存在節(jié)點以及新節(jié)點的關(guān)聯(lián)度數(shù)作出判斷:
若現(xiàn)有的鄰居數(shù)+1<=最大鄰居數(shù),則接受Y;
否則,{從X的鄰居中選擇能力低于Y節(jié)點能力的節(jié)點,放在子集S中。
如果不存在這樣的節(jié)點,則拒絕Y;
否則,{從子集S選擇度數(shù)最大的節(jié)點作為候選節(jié)點Z。
如果Y的處理能力大于X的所有鄰居節(jié)點的能力,或Z節(jié)點的鄰居數(shù)大于Y節(jié)點的鄰居數(shù), 則放棄Z節(jié)點,接受Y節(jié)點;
否則,拒絕Y節(jié)點
單跳復制
為了提高搜索效率,每個節(jié)點動態(tài)維護其鄰居節(jié)點內(nèi)容的索引,這些索引在鄰居節(jié)點間建立連接時相互交換信息獲得,并周期性進行增量更新。這樣,當一個節(jié)點收到查詢信息,它不僅可以返回自己相匹配的內(nèi)容,也可以返回其鄰居節(jié)點的相匹配的內(nèi)容。
當某一鄰居節(jié)點因為拓撲自適應或節(jié)點離開系統(tǒng)而變成非鄰居節(jié)點時,該鄰居節(jié)點的的索引也要更新。
隨機搜索
利用TTLs (Time-to-Live)和節(jié)點查詢記錄來避免冗余路徑查詢。發(fā)送查詢的起始節(jié)點給發(fā)送的查詢分配一個GUID。各中間節(jié)點將記錄它將查詢(GUID)轉(zhuǎn)發(fā)給的鄰居節(jié)點,使帶有相同GUID的查詢訪問不再轉(zhuǎn)發(fā)給已經(jīng)轉(zhuǎn)發(fā)過的鄰居,這樣,避免同一查詢兩次經(jīng)過同一路徑。每一個查詢帶有一個最大響應數(shù)的參數(shù),即查詢得到的匹配答案的最大數(shù)。
除了TTL,查詢持續(xù)時間都將受到最大響應的限制。節(jié)點找到一個匹配的答案,查詢的最大響應值都將減1。如果查詢的最大響應值減到0,查詢將結(jié)束。查詢反饋信息將按原路徑發(fā)回源節(jié)點。如果節(jié)點對查詢有響應,無論相匹配的內(nèi)容是來自自己本身,還是鄰居節(jié)點的,都將擁有匹配內(nèi)容的節(jié)點地址追加到該查詢。這樣就能保證對同一文件查詢不會產(chǎn)生重復的回復;只有當節(jié)點有相匹配的內(nèi)容并且不在查詢消息列表中時,才生成查詢響應。
模擬結(jié)果
我們通過模擬比較改進資源定位搜索方法(IRS)與經(jīng)典的方法FLOOD法和SUPER(Supernode mechanism),在評價中定義兩個參數(shù):1.失效點FP(failure point):一個節(jié)點在閾值點的查詢率,超過該閾值點,查詢的成功率低于90%,這個參數(shù)可直接反映系統(tǒng)的處理能力,并與查詢時延相關(guān)。 2.跳數(shù)(FP-HC):在FP點之前的平均跳數(shù)(找到所查詢文件所經(jīng)過的跳數(shù))。下表是在不同復制因子下改進方法(IRS)與FLOOD法和SUPER的比較結(jié)果。
可以看出,改進的方法(IRS)隨復制率的增高,性能明顯優(yōu)于其它兩種方法。不難看出,這是由于在SUPER方法中,超級節(jié)點之間使用洪泛法限制了其系統(tǒng)的可擴展性。IRS方法可以提高P2P系統(tǒng)的查詢處理能力,并且在系統(tǒng)規(guī)模較大、查詢量較大的時候,實現(xiàn)較高的查詢成功率,具有較好的可擴展性。由上表可以看出IRS方法的可擴展性與系統(tǒng)的復制率有關(guān)。
綜上所述,P2P系統(tǒng)最大的特點就是用戶之間直接共享資源,其核心技術(shù)就是分布式對象的定位機制,這也是提高網(wǎng)絡(luò)可擴展性、解決網(wǎng)絡(luò)帶寬被吞噬的關(guān)鍵所在。在充分考慮到節(jié)點多樣性的基礎(chǔ)上,通過拓撲自適應,單跳復制,搜索機制等方面提出了非結(jié)構(gòu)化P2P網(wǎng)絡(luò)系統(tǒng)網(wǎng)絡(luò)上資源定位,資源搜索改進方法,以減少了查詢需要發(fā)送的消息和需要訪問的節(jié)點數(shù),在提高系統(tǒng)性能提高的同時,保證系統(tǒng)的健壯性。
未來的網(wǎng)絡(luò)將呈現(xiàn)大規(guī)模分布式、全球性計算和全球性存儲的特征,從長遠的趨勢來看,對于訪問和傳輸服務的需求必將遠遠大于對于計算功能的需要。隨著分布式系統(tǒng)經(jīng)典問題的解決以及優(yōu)化的資源動態(tài)分配和資源恢復技術(shù)的成熟,P2P與網(wǎng)格技術(shù)必將結(jié)合起來,以影響整個計算機網(wǎng)絡(luò)的概念和人們的信息獲取模式。