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