專利名稱:資源的級(jí)別自適應(yīng)搜索方法
技術(shù)領(lǐng)域:
本發(fā)明屬于互聯(lián)網(wǎng)通信技術(shù)領(lǐng)域,涉及網(wǎng)絡(luò)資源的査詢方法。本方法的目的是針對(duì)非 結(jié)構(gòu)化對(duì)等網(wǎng)絡(luò)由于廣播方式作為其搜索的基本策略而引發(fā)的較大網(wǎng)絡(luò)流量,改善分布 式網(wǎng)絡(luò)的資源搜索性能。
技術(shù)背景P2P網(wǎng)絡(luò)是一種全新網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),在文件共享、對(duì)等計(jì)算等眾多領(lǐng)域中顯示出巨大 的優(yōu)勢(shì),尤其是非結(jié)構(gòu)化P2P網(wǎng)絡(luò)(如Gnutella)受節(jié)點(diǎn)頻繁加入和退出系統(tǒng)的影響小, 因此具有較好的可用性。它沒有索引服務(wù)器,采用了基于完全隨機(jī)圖的洪泛(Flooding) 發(fā)現(xiàn)和隨機(jī)轉(zhuǎn)發(fā)(Random Walker )機(jī)制。為了控制搜索消息的傳輸,通過TTL(Time To Live) 的減值來實(shí)現(xiàn)。但是查詢的結(jié)果可能不完全,査詢速度較慢,采用廣播査詢的系統(tǒng)對(duì)網(wǎng)絡(luò) 帶寬的消耗非常大,并由此帶來可擴(kuò)展性差等問題。有時(shí)P2P流的高速傳輸搶占了6(^-8(m 的網(wǎng)絡(luò)帶寬,容易引起熱點(diǎn)處的資源瓶頸,所以容易造成高峰時(shí)段的鏈路堵塞。雖然后來對(duì)盲目的洪泛式搜索做了一些改進(jìn),如方法一、Iterative De印ening:這 種搜索策略是在初始階段給TTL 一個(gè)很小的值,如果在TTL減為0時(shí)還沒有搜索到資源, 則給TTL重新賦更高的值。這種策略可以減少搜索的半徑,但是在最壞的情況下,延遲很 大。又如方法二、 Random Walk:在隨機(jī)漫歩中,請(qǐng)求者發(fā)出K個(gè)査詢請(qǐng)求給隨機(jī)挑選的K 個(gè)相鄰節(jié)點(diǎn)。然后每個(gè)査詢信息在以后的漫歩過程中直接與請(qǐng)求者保持聯(lián)系,詢問是否還 要繼續(xù)下一歩。如果請(qǐng)求者同意繼續(xù)漫歩,則又丌始隨機(jī)選擇下一歩漫歩的節(jié)點(diǎn),否則中 止搜索。這種査詢方式?jīng)]有方向性,只是減少了洪泛范圍。雖然結(jié)構(gòu)化P2P網(wǎng)絡(luò)性能、可擴(kuò)展性較好、較容易管理,但是最大的問題是這種結(jié)構(gòu) 的維護(hù)機(jī)制較為復(fù)雜,尤其是節(jié)點(diǎn)頻繁加入退出造成的網(wǎng)絡(luò)波動(dòng)(Churn)會(huì)極大增加結(jié) 構(gòu)的維護(hù)代價(jià)。網(wǎng)絡(luò)波動(dòng)(節(jié)點(diǎn)的加入、退出、失敗、遷移、并發(fā)加入過程、網(wǎng)絡(luò)分割等) 的程度嚴(yán)重影響發(fā)現(xiàn)算法的效率。DHT的發(fā)現(xiàn)算法如Chord、 CAN、 Koorde等都是考慮網(wǎng) 絡(luò)波動(dòng)的最差情況下的設(shè)計(jì)與實(shí)現(xiàn)。由于每個(gè)節(jié)點(diǎn)的度數(shù)盡量保持最小,這樣需要響應(yīng)的 成員關(guān)系變化的維護(hù)可以比較小,從而可以快速恢復(fù)網(wǎng)絡(luò)波動(dòng)造成的影響。但是每個(gè)節(jié)點(diǎn) 僅有少量路由狀態(tài)的代價(jià)是發(fā)現(xiàn)算法的高延時(shí),因?yàn)槊恳淮螙苏倚枰?lián)系多個(gè)節(jié)點(diǎn),在穩(wěn) 定的網(wǎng)絡(luò)中這種思路是不必要的。此外,網(wǎng)絡(luò)中節(jié)點(diǎn)之間體現(xiàn)出較大的差別,這些設(shè)備在計(jì)算能力、存儲(chǔ)空間和電池容 量上差別很大,并且實(shí)際網(wǎng)絡(luò)被路由器和交換機(jī)分割成不同的自治區(qū)域,體現(xiàn)出嚴(yán)密的層 次性,使得這些節(jié)點(diǎn)不能按照各自的處理能力來分配任務(wù)。 發(fā)明內(nèi)容鑒于上述,本發(fā)明的目的是提出一種基于級(jí)別自適應(yīng)的對(duì)等網(wǎng)絡(luò)的資源搜索方法,該 方法能改善分布式網(wǎng)絡(luò)的資源搜索性能。 為此,本發(fā)明采用以下技術(shù)方案 一種資源的級(jí)別自適應(yīng)搜索方法,包括如下歩驟首先,設(shè)計(jì)相應(yīng)的通信協(xié)議,其中協(xié)議中引入了 querylist表項(xiàng),用來保存到達(dá)目的 節(jié)點(diǎn)跨越整個(gè)網(wǎng)絡(luò)的逐跳路徑。節(jié)點(diǎn)根據(jù)歷史査詢的結(jié)果將鄰居節(jié)點(diǎn)的作用值進(jìn)行量化, 將鄰居節(jié)點(diǎn)劃分為不同的等級(jí),作為自己搜索資源的依據(jù)。然后,節(jié)點(diǎn)進(jìn)行資源搜索時(shí),采用向超級(jí)節(jié)點(diǎn)深度擴(kuò)展、向其他鄰居廣度擴(kuò)展的資源 搜索方式分級(jí)分次地進(jìn)行査詢。其次,對(duì)于網(wǎng)絡(luò)的動(dòng)態(tài)變化,利用探測(cè)心跳來實(shí)時(shí)更新自己的鄰居節(jié)點(diǎn)表。最后,每個(gè)節(jié)點(diǎn)根據(jù)自己的負(fù)載能力對(duì)自己的鄰居節(jié)點(diǎn)數(shù)目加以限制,從而達(dá)到平衡 負(fù)載的目的。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果1) 節(jié)點(diǎn)對(duì)自己的貢獻(xiàn)而不是對(duì)全網(wǎng)的貢獻(xiàn)來各自獨(dú)立的評(píng)價(jià)超級(jí)節(jié)點(diǎn),作為搜索的 依據(jù)。而并不是去盲目搜索、或者"跟風(fēng)"搜索網(wǎng)絡(luò)中的熱點(diǎn)節(jié)點(diǎn),這樣在一定程度上避 免了節(jié)點(diǎn)因過載而引起的節(jié)點(diǎn)失效問題。2) 在協(xié)議中引入了 Querylist字段, 一方面,有捎帶確認(rèn)的功能,收到消息的節(jié)點(diǎn)可 以通過QueryList中的信息獲得周圍鄰居節(jié)點(diǎn)的活動(dòng)情況。并且,從QueryList中可以知 道那些節(jié)點(diǎn)已經(jīng)接收過該消息,進(jìn)行Query消息轉(zhuǎn)發(fā)時(shí)可以避免將消息轉(zhuǎn)發(fā)到這些節(jié)點(diǎn), 從而減少網(wǎng)絡(luò)中的消息的報(bào)文數(shù)量;另一方面收到消息的節(jié)點(diǎn)還可以從消息中獲得自己未 知的節(jié)點(diǎn)的信息,有利于網(wǎng)絡(luò)中節(jié)點(diǎn)信息的收集。3) 采用廣度和深度相結(jié)合的資源搜索方式。有效地抑制了非結(jié)構(gòu)化對(duì)等網(wǎng)絡(luò)由于廣 播方式作為其搜索的基本策略而引發(fā)的較大網(wǎng)絡(luò)流量,因此,降低了網(wǎng)絡(luò)丌銷。4) 設(shè)定與鄰居節(jié)點(diǎn)級(jí)別有關(guān)的心跳探測(cè)模式,與較小的頻率與級(jí)別較低的節(jié)點(diǎn)保持 心跳測(cè)試,節(jié)省了網(wǎng)絡(luò)帶寬資源。5) 由于各主機(jī)存儲(chǔ)和計(jì)算能力的異質(zhì)性,每個(gè)節(jié)點(diǎn)都會(huì)對(duì)自己的鄰居節(jié)點(diǎn)數(shù)目加以 限制,從而根據(jù)網(wǎng)絡(luò)中節(jié)點(diǎn)的不同承載能力來合理的平衡網(wǎng)絡(luò)負(fù)載。
圖1是本發(fā)明資源的級(jí)別自適應(yīng)搜索網(wǎng)絡(luò)拓?fù)鋱D; 圖2是協(xié)議消息都包含的消息頭部格式;圖3是Query的消息報(bào)文格式; 圖4是節(jié)點(diǎn)轉(zhuǎn)發(fā)査詢報(bào)文的流程圖; 圖5是Queryhit的消息報(bào)文格式; 圖6是接收到査詢結(jié)果評(píng)價(jià)超級(jí)節(jié)點(diǎn)的流程圖; 圖7是網(wǎng)絡(luò)資源查詢方法示意圖。
具體實(shí)施例方式
本發(fā)明是一種資源的級(jí)別自適應(yīng)搜索方法,包括如下歩驟首先,給出相應(yīng)的協(xié)議設(shè)計(jì),其中協(xié)議中引入了 querylist表項(xiàng),用來保存到達(dá)目的 節(jié)點(diǎn)跨越整個(gè)網(wǎng)絡(luò)的逐跳路徑。節(jié)點(diǎn)根據(jù)歷史查詢的結(jié)果將鄰居節(jié)點(diǎn)的作用值進(jìn)行量化, 將鄰居節(jié)點(diǎn)劃分為不同的等級(jí),作為自己搜索資源的依據(jù)。然后,節(jié)點(diǎn)進(jìn)行資源搜索時(shí),采用向超級(jí)節(jié)點(diǎn)深度擴(kuò)展、向其他鄰居節(jié)點(diǎn)廣度擴(kuò)展的資源搜索方式。融合了水波擴(kuò)散的算法分級(jí)分次的進(jìn)行査詢。具體的表現(xiàn)是節(jié)點(diǎn)每次發(fā)起(査詢時(shí)),向自己的超級(jí)節(jié)點(diǎn)發(fā)送TTL值較大的査詢請(qǐng)求,而向普通的鄰居節(jié)點(diǎn)發(fā)送 較小TTL值的查詢請(qǐng)求,從而縮小洪泛的范圍,節(jié)省大量的帶寬,并且保證了資源査找的 效率。其次,對(duì)于網(wǎng)絡(luò)的動(dòng)態(tài)變化,利用探測(cè)心跳來實(shí)時(shí)更新自己的鄰居節(jié)點(diǎn)表,為了避免 網(wǎng)絡(luò)中由于探測(cè)引起的大量報(bào)文,本方法采用了采用與節(jié)點(diǎn)級(jí)別高低相關(guān)的心跳探測(cè)方法 對(duì)鄰居節(jié)點(diǎn)進(jìn)行實(shí)時(shí)更新。系統(tǒng)中高級(jí)別的鄰居節(jié)點(diǎn)具有較低的心跳值,而級(jí)別低的鄰居 節(jié)點(diǎn)則具有較大的心跳值,這樣可以保證節(jié)點(diǎn)與級(jí)別高的鄰居節(jié)點(diǎn)之間維持著較頻繁的聯(lián) 系,由于級(jí)別高的鄰居節(jié)點(diǎn)僅僅是少數(shù),因此,這種頻繁的聯(lián)系并不會(huì)給節(jié)點(diǎn)的運(yùn)行和網(wǎng) 絡(luò)負(fù)載帶來太大的負(fù)擔(dān)。最后,由于網(wǎng)絡(luò)中各主機(jī)存儲(chǔ)和計(jì)算能力的限制,每個(gè)節(jié)點(diǎn)根據(jù)自己的負(fù)載能力對(duì)自 己的鄰居節(jié)點(diǎn)數(shù)目加以限制,從而達(dá)到平衡負(fù)載的目的。本發(fā)明采用非結(jié)構(gòu)化的對(duì)等網(wǎng)絡(luò)模型,網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都具有客戶機(jī)、服務(wù)器和搜 索器的功能,系統(tǒng)中存在大量的節(jié)點(diǎn),節(jié)點(diǎn)可以動(dòng)態(tài)的加入和離丌系統(tǒng),系統(tǒng)中任意節(jié)點(diǎn) 之間可以進(jìn)行消息通信。節(jié)點(diǎn)可以動(dòng)態(tài)地決定與哪個(gè)節(jié)點(diǎn)直接相連(決定哪個(gè)節(jié)點(diǎn)成為該 節(jié)點(diǎn)的Peer),從而使網(wǎng)絡(luò)結(jié)構(gòu)的配置達(dá)到最優(yōu)。同時(shí),對(duì)不同的鄰居節(jié)點(diǎn)設(shè)定不同的級(jí) 別。資源的級(jí)別自適應(yīng)協(xié)議的網(wǎng)絡(luò)模型如圖1所示:考慮網(wǎng)絡(luò)中的節(jié)點(diǎn)和它們之間的相互 關(guān)系,包括相互間的鄰接關(guān)系和相互間的信任關(guān)系。圖中實(shí)連接線表明了節(jié)點(diǎn)和鄰居節(jié)點(diǎn) 間的鄰接關(guān)系,虛線則表現(xiàn)了它們之間的信任關(guān)系。鄰接關(guān)系表示節(jié)點(diǎn)之間是否相鄰,是 一種對(duì)稱關(guān)系。由于各節(jié)點(diǎn)相互獨(dú)立的對(duì)節(jié)點(diǎn)進(jìn)行評(píng)價(jià),所以節(jié)點(diǎn)間的信任關(guān)系并不是對(duì) 稱的。以下對(duì)本發(fā)明作詳細(xì)說明。 對(duì)鄰居節(jié)點(diǎn)劃分等級(jí)信任關(guān)系是每個(gè)節(jié)點(diǎn)根據(jù)以往的查詢結(jié)果對(duì)相關(guān)節(jié)點(diǎn)的評(píng)價(jià),并以此對(duì)不同的鄰居節(jié) 點(diǎn)設(shè)定不同的級(jí)別。對(duì)鄰居節(jié)點(diǎn)級(jí)別的設(shè)定是基于這樣的假設(shè)曾經(jīng)對(duì)自己有幫助的節(jié)點(diǎn), 在以后的查詢中對(duì)自己有幫助的可能性會(huì)大一些。將節(jié)點(diǎn)對(duì)自己的幫助進(jìn)行量化并累積, 該數(shù)值稱為信任值。信任值越高的節(jié)點(diǎn),對(duì)自己的幫助越大,以后能夠從該節(jié)點(diǎn)得到幫助 的可能性就越大。各節(jié)點(diǎn)獨(dú)立地對(duì)網(wǎng)絡(luò)中的節(jié)點(diǎn)進(jìn)行評(píng)價(jià),保存對(duì)網(wǎng)絡(luò)中節(jié)點(diǎn)的信任值, 作為搜索的依據(jù)。根據(jù)信任值,節(jié)點(diǎn)將自己的鄰居節(jié)點(diǎn)劃分等級(jí),信任值高的節(jié)點(diǎn)為高級(jí)
別節(jié)點(diǎn),信任值低的節(jié)點(diǎn)為低級(jí)別,將最高級(jí)別的鄰居節(jié)點(diǎn)作為節(jié)點(diǎn)的超級(jí)節(jié)點(diǎn)。 通信協(xié)議本發(fā)明中節(jié)點(diǎn)之間通過以下四個(gè)基本的通訊協(xié)議實(shí)現(xiàn)相互間的協(xié)作,完成對(duì)等網(wǎng)絡(luò)中 對(duì)等節(jié)點(diǎn)的發(fā)現(xiàn)及資源的定位Ping, Pong, Query, QueryHit。其中Ping, Pong消息用 來確定節(jié)點(diǎn)的在線情況,Query及QueryHit消息用來實(shí)現(xiàn)資源査詢。各消息的內(nèi)容格式和含義如下HeadPing, Pong, Query, QueryHit四個(gè)消息都包含一個(gè)如圖2所示格式的消息頭。其中, Sender字段記錄了發(fā)送消息節(jié)點(diǎn)的ID和AP信息。PacketID為消息的ID,山消息的源發(fā) 節(jié)點(diǎn)隨機(jī)產(chǎn)生,即接收者轉(zhuǎn)發(fā)消息時(shí)不改變PacketID的值,如果收到相同PacketID的消 息,則可以丟棄,不做處理。Type字段為消息的類型,分別用不同的值來區(qū)分Ping, Pong, Query, QueryHit四個(gè)消息。TTL字段為消息的生命值,節(jié)點(diǎn)收到消息時(shí)將TTL減1,如 果TTL為0則不會(huì)對(duì)消息進(jìn)行轉(zhuǎn)發(fā)。Payload字段為消息的長(zhǎng)度。PingPing消息用來確定網(wǎng)絡(luò)中節(jié)點(diǎn)的活動(dòng)狀態(tài),即確定節(jié)點(diǎn)是否仍然在線。Ping消息只 有消息頭,沒有其他內(nèi)容。 PongPong消息則用來回應(yīng)Ping消息。Pong消息和Ping消息一樣也只有消息頭,沒有其 他內(nèi)容。 QueryQuery消息是對(duì)資源的査詢請(qǐng)求。消息格式如圖3所示Source字段記錄了 Query消息的源發(fā)節(jié)點(diǎn),即査詢的最初發(fā)起節(jié)點(diǎn)。源節(jié)點(diǎn)需要知 道到目的節(jié)點(diǎn)的逐跳完整路由。為了減少路由發(fā)現(xiàn)過程的丌銷,每個(gè)節(jié)點(diǎn)都包含一個(gè)路山 緩存區(qū)。Search字段記錄了需要査詢的信息。QueryList字段是一串節(jié)點(diǎn)鏈表,建立了到 達(dá)目的節(jié)點(diǎn)的跨越整個(gè)網(wǎng)絡(luò)的逐跳路徑。節(jié)點(diǎn)在收到Query消息后,首先査找自己是否有 所求資源,如果沒有,則將此消息轉(zhuǎn)發(fā)給自己的査詢節(jié)點(diǎn)即最高級(jí)別的鄰接點(diǎn),如果節(jié)點(diǎn) 有相應(yīng)的資源,這個(gè)節(jié)點(diǎn)再以同樣的方式沿著反向路由發(fā)送Queryhit消息,直到源節(jié)點(diǎn) 收到Queryhit。源節(jié)點(diǎn)收到此報(bào)文后,要做一系列處理(后面將會(huì)提到),本方法采用記 錄每跳節(jié)點(diǎn)的方法,而不需要釆用專門的環(huán)路檢測(cè)機(jī)制,同時(shí),每個(gè)節(jié)點(diǎn)都在路由發(fā)現(xiàn)過程 中建立起自己的路由緩存區(qū)供以后使用。QueryList字段會(huì)使Query消息比較長(zhǎng),但卻可以使所有接收到該消息的節(jié)點(diǎn)能夠獲 取相應(yīng)的信息, 一方面,有捎帶確認(rèn)的功能,收到消息的節(jié)點(diǎn)可以通過QueryList中的信 息獲得周圍鄰居節(jié)點(diǎn)的活動(dòng)情況,即判斷周圍的鄰居節(jié)點(diǎn)是否在線,避免發(fā)送額外的ping 和pong報(bào)文。并且,從QueryList中可以知道那些節(jié)點(diǎn)已經(jīng)接收過該消息,進(jìn)行Query 消息轉(zhuǎn)發(fā)時(shí)可以避免將消息轉(zhuǎn)發(fā)到這些節(jié)點(diǎn),從而大大減少網(wǎng)絡(luò)中的消息的報(bào)文數(shù)量;另
一方面收到消息的節(jié)點(diǎn)還可以從消息中獲得自己未知的節(jié)點(diǎn)的信息,這樣,節(jié)點(diǎn)可以將自 身的信息告知更多的其它節(jié)點(diǎn),有利于網(wǎng)絡(luò)中節(jié)點(diǎn)信息的收集。節(jié)點(diǎn)收到query報(bào)文后處理的方法如圖4所示節(jié)點(diǎn)收到TTL為N的query報(bào)文后, 首先檢查N是否為O,如果為0則忽略此報(bào)文,不對(duì)其做任何處理。如果N不為0,則將 此節(jié)點(diǎn)的信息附在querylist中,并判斷本機(jī)是否有查找的內(nèi)容。如果有,則產(chǎn)生queryhit 報(bào)文,將queryhit報(bào)文發(fā)送給querylist中倒數(shù)第二個(gè)節(jié)點(diǎn);如果沒有,則査看本機(jī)的 鄰居節(jié)點(diǎn),如果鄰居節(jié)點(diǎn)是超級(jí)節(jié)點(diǎn),則發(fā)送給超級(jí)節(jié)點(diǎn)TTL-N-1的query報(bào)文,發(fā)給非 超級(jí)節(jié)點(diǎn)的鄰居節(jié)點(diǎn)的則是TTL值為1的query報(bào)文。QueryHitQueryHit消息標(biāo)志著査詢成功。消息格式如圖5所示其中,Result字段記錄了査詢的結(jié)果, 一旦資源定位,資源的傳輸將在源節(jié)點(diǎn)與目 的節(jié)點(diǎn)之間按照既定的協(xié)議進(jìn)行。QueryList字段的含義與Query消息相同,節(jié)點(diǎn)根據(jù) QueryList字段中獲得自己未知的節(jié)點(diǎn)的信息,并對(duì)QueryList中的節(jié)點(diǎn)進(jìn)行評(píng)估。評(píng)估時(shí)考慮如下信息QueryHit消息到達(dá)的次序和QueryList字段中的節(jié)點(diǎn)數(shù)。根據(jù) QueryHit消息到達(dá)的次序?yàn)镼ueryHit消息一個(gè)相應(yīng)的有用值,而査詢節(jié)點(diǎn)保留的其他節(jié) 點(diǎn)的有用值是queryhit消息的有用值與QueryList字段中的節(jié)點(diǎn)數(shù)的比值。同一個(gè) QueryHit消息中QueryList字段中的節(jié)點(diǎn)對(duì)査詢消息節(jié)點(diǎn)的有用值是相同的。由于發(fā)出一個(gè)Query査詢消息后,可能會(huì)收到多個(gè)QueryHit消息,因此需要根據(jù)到 達(dá)的次序,確定該QueryHit消息的有用值。先到達(dá)的QueryHit消息的有用值越大,后到 達(dá)的QueryHit消息的有用值將隨到達(dá)的次序遞減。這樣可以保證有用值大的鄰居節(jié)點(diǎn)是 與節(jié)點(diǎn)具有較快連接速度的節(jié)點(diǎn),從而提高搜索的效率,減少延遲。收到QueryHit消息 的算法如圖6所示査詢消息的節(jié)點(diǎn)收到相應(yīng)的queryhit報(bào)文后,根據(jù)queryhit的到達(dá)次序(可能存在 多個(gè)擁有資源的節(jié)點(diǎn),故查詢消息的節(jié)點(diǎn)可能收到多個(gè)queryhit報(bào)文)給此報(bào)文附上不 同的有用值,附有用值的原則是越早到達(dá)的報(bào)文有用值W越大,querylist中各個(gè)節(jié)點(diǎn)的 有用值則是queryhit報(bào)文的有用值與querylist中節(jié)點(diǎn)數(shù)目的比值。査詢發(fā)起節(jié)點(diǎn)更新 對(duì)應(yīng)的節(jié)點(diǎn)的有用值(也即評(píng)價(jià)值)。然后根據(jù)新的各個(gè)節(jié)點(diǎn)的有用值更新本節(jié)點(diǎn)的鄰居 節(jié)點(diǎn)的級(jí)別。節(jié)點(diǎn)將自己的鄰居節(jié)點(diǎn)的有用值進(jìn)行累積,累計(jì)到一定值后,鄰居節(jié)點(diǎn)的級(jí)別就可以 升高一級(jí)。這樣經(jīng)過多次查詢搜索后,節(jié)點(diǎn)就會(huì)根據(jù)鄰居節(jié)點(diǎn)的反饋情況,確定搜索最快、 成功率最高的節(jié)點(diǎn)作為自己的最高級(jí)鄰居節(jié)點(diǎn),即超級(jí)節(jié)點(diǎn),同時(shí),由于次最高級(jí)的鄰居 節(jié)點(diǎn)是搜索比較快、成功率比較高的節(jié)點(diǎn),因此, 一旦通過超級(jí)節(jié)點(diǎn)的査詢沒有成功,或 者超級(jí)節(jié)點(diǎn)出現(xiàn)故障,無法正常提供查詢服務(wù),那么次最高級(jí)的鄰居節(jié)點(diǎn)就會(huì)作為候補(bǔ)節(jié) 點(diǎn)進(jìn)行查詢或作為新的超級(jí)節(jié)點(diǎn)繼續(xù)工作。 自適應(yīng)策略本發(fā)明在節(jié)點(diǎn)間相互協(xié)作的過程中,根據(jù)自身的情況作出自適應(yīng)地調(diào)整,主要包括:1、 節(jié)點(diǎn)的加入和退出通常,在p2p網(wǎng)絡(luò)中,如果節(jié)點(diǎn)的鄰居節(jié)點(diǎn)比較多,那么就比較容易査詢到需要査找 的內(nèi)容。但當(dāng)系統(tǒng)規(guī)模較大,節(jié)點(diǎn)動(dòng)態(tài)性增強(qiáng)時(shí),維持大量的鄰居節(jié)點(diǎn)數(shù)目, 一方面需要 消耗大量的存儲(chǔ)資源保存鄰居節(jié)點(diǎn)的相關(guān)信息,另一方面,為了維持和更新這些信息,需 要與這些鄰居節(jié)點(diǎn)之間進(jìn)行大量的聯(lián)系,消耗大量的計(jì)算資源。因此,由于存儲(chǔ)和計(jì)算能 力的限制,每個(gè)節(jié)點(diǎn)都會(huì)對(duì)自己的鄰居節(jié)點(diǎn)數(shù)目加以限制。當(dāng)新節(jié)點(diǎn)加入系統(tǒng),首先需要找到網(wǎng)絡(luò)中的一個(gè)節(jié)點(diǎn),并向其提出連接請(qǐng)求,與其建 立鄰接關(guān)系。被請(qǐng)求連接的節(jié)點(diǎn)則根據(jù)自身的能力和鄰居節(jié)點(diǎn)的情況,決定是否接受請(qǐng)求 與對(duì)方建立鄰接關(guān)系。例如,節(jié)點(diǎn)i加入網(wǎng)絡(luò),向節(jié)點(diǎn)j提出連接請(qǐng)求,要求建立鄰接關(guān) 系,那么節(jié)點(diǎn)j收到請(qǐng)求后,首先判斷自己的鄰居節(jié)點(diǎn)數(shù)Naj是否超過預(yù)先設(shè)定的最大值 mj,如果naj〈mj,則接受節(jié)點(diǎn)i的請(qǐng)求,如果naj-mj,則査看鄰居節(jié)點(diǎn)中本地信任值最 小的節(jié)點(diǎn)k,判斷其本地信任值TS(j, k)是否小于節(jié)點(diǎn)i的初始值TS(j, i)。如果TS(J, k)< =TS(j, i),節(jié)點(diǎn)j就斷丌和節(jié)點(diǎn)k的連接,接受節(jié)點(diǎn)i的連接請(qǐng)求,與節(jié)點(diǎn)i建立鄰接關(guān)系, 如果TS(j, k) > TS(j, i),那么節(jié)點(diǎn)j就會(huì)拒絕節(jié)點(diǎn)i的連接請(qǐng)求,不與節(jié)點(diǎn)i建立鄰接關(guān) 系,這樣節(jié)點(diǎn)i就需要連接網(wǎng)絡(luò)中的其它節(jié)點(diǎn),直到找到可以接受其連接請(qǐng)求的節(jié)點(diǎn)。關(guān)于如何獲得網(wǎng)絡(luò)中的己存在節(jié)點(diǎn)的訪問地址,不同的系統(tǒng)有不同的方法(如建立一 個(gè)系統(tǒng)的登陸服務(wù)器,告訴新加入的節(jié)點(diǎn)網(wǎng)絡(luò)中已有的節(jié)點(diǎn)),本文在此不做討論,僅關(guān) 注節(jié)點(diǎn)接入網(wǎng)絡(luò)后的行為和操作。節(jié)點(diǎn)退出網(wǎng)絡(luò)時(shí),斷丌與各鄰居節(jié)點(diǎn)的連接,但保留網(wǎng)絡(luò)中鄰居節(jié)點(diǎn)的本地信任值作 為以后査詢和搜索的基礎(chǔ),從而提高網(wǎng)絡(luò)査詢和搜索的效率。2、 鄰接表更新P2P網(wǎng)絡(luò)中節(jié)點(diǎn)動(dòng)態(tài)性很高(指節(jié)點(diǎn)的加入、退出很頻繁),去除那些己經(jīng)離開系統(tǒng) 的節(jié)點(diǎn)的信息,補(bǔ)入新的在線節(jié)點(diǎn)的信息。為了適應(yīng)網(wǎng)絡(luò)結(jié)構(gòu)的這種變化,通常采用事件 觸發(fā)式和周期式以及兩者相結(jié)合的方式對(duì)鄰接表進(jìn)行更新。對(duì)于大規(guī)模網(wǎng)絡(luò)而言,周期性 的更新機(jī)制需要花費(fèi)較高代價(jià)。本發(fā)明引入簡(jiǎn)單的超時(shí)機(jī)制以清除過期指針節(jié)點(diǎn)與鄰居節(jié)點(diǎn)之間通過心跳消息聯(lián) 系,節(jié)點(diǎn)根據(jù)級(jí)別給每個(gè)鄰居節(jié)點(diǎn)設(shè)定一個(gè)心跳值,每隔一段時(shí)間減少鄰居節(jié)點(diǎn)的心跳值, 并檢查該心跳值,當(dāng)某個(gè)鄰居節(jié)點(diǎn)心跳值為O時(shí),節(jié)點(diǎn)向該鄰居節(jié)點(diǎn)發(fā)送"心跳"信息, 即ping報(bào)文,鄰居節(jié)點(diǎn)接收到報(bào)文后會(huì)回一個(gè)pong報(bào)文,節(jié)點(diǎn)收到后就可以恢復(fù)鄰居節(jié) 點(diǎn)的心跳值,如果該鄰居節(jié)點(diǎn)沒有回應(yīng),那么過段時(shí)間后該鄰居節(jié)點(diǎn)的心跳值就會(huì)小于 O,節(jié)點(diǎn)就會(huì)認(rèn)為該鄰居節(jié)點(diǎn)發(fā)生了失效,斷開與其的鄰接關(guān)系,防止無效節(jié)點(diǎn)信息的堆 積。當(dāng)節(jié)點(diǎn)在網(wǎng)絡(luò)中經(jīng)常的進(jìn)行查詢或轉(zhuǎn)發(fā)查詢等操作時(shí),可以根據(jù)網(wǎng)絡(luò)中的Query等報(bào) 文更新鄰居節(jié)點(diǎn)的心跳值,因此當(dāng)節(jié)點(diǎn)在網(wǎng)絡(luò)中比較活躍時(shí),其實(shí)際需要節(jié)點(diǎn)主動(dòng)發(fā)送心 跳消息來確定鄰居節(jié)點(diǎn)狀態(tài)的情況并不多,其丌銷并不大。在資源的級(jí)別自適應(yīng)搜索方法下高級(jí)別的鄰居節(jié)點(diǎn)具有較低的心跳值,而級(jí)別低的鄰 居節(jié)點(diǎn)則具有較大的心跳值,這樣可以保證節(jié)點(diǎn)與級(jí)別高的鄰居節(jié)點(diǎn)之間維持著較頻繁的 聯(lián)系,而與級(jí)別低的鄰居節(jié)點(diǎn)之間的聯(lián)系不用太多, 一旦級(jí)別高的鄰居節(jié)點(diǎn)退出或出現(xiàn)故 障,節(jié)點(diǎn)可以很快的發(fā)現(xiàn),同時(shí),由于級(jí)別高的鄰居節(jié)點(diǎn)僅僅是少數(shù),因此,這種頻繁的 聯(lián)系并不會(huì)給節(jié)點(diǎn)的運(yùn)行和網(wǎng)絡(luò)負(fù)載帶來太大的負(fù)擔(dān)。 一旦通過超級(jí)節(jié)點(diǎn)的査詢沒有成 功,或者超級(jí)節(jié)點(diǎn)出現(xiàn)故障,無法正常提供查詢服務(wù),那么次最高級(jí)的鄰居節(jié)點(diǎn)就會(huì)作為 候補(bǔ)節(jié)點(diǎn)進(jìn)行查詢或作為新的超級(jí)節(jié)點(diǎn)繼續(xù)工作。3、自適應(yīng)査詢節(jié)點(diǎn)進(jìn)行資源查找和搜索時(shí),采用廣度和深度搜索相結(jié)合的方式,分級(jí)分次的進(jìn)行査 詢,向超級(jí)節(jié)點(diǎn)發(fā)送TTL值為T的査詢報(bào)文,而向其它鄰居節(jié)點(diǎn)發(fā)送TTL值為1的査詢報(bào) 文,收到查詢報(bào)文的節(jié)點(diǎn),按照如圖7所示算法進(jìn)行轉(zhuǎn)發(fā)。圖中節(jié)點(diǎn)1向其最高級(jí)鄰居節(jié)點(diǎn)3發(fā)送TTL值為T (T=3)的査詢報(bào)文,而向其它鄰 居節(jié)點(diǎn)(節(jié)點(diǎn)2和節(jié)點(diǎn)4)發(fā)送TTL值為1的査詢報(bào)文。節(jié)點(diǎn)3收到査詢報(bào)文后,進(jìn)行類 似的動(dòng)作,將査詢報(bào)文TTL-1轉(zhuǎn)發(fā)給自己的最高級(jí)鄰接點(diǎn)6,而向其它鄰居節(jié)點(diǎn)(節(jié)點(diǎn)9 和節(jié)點(diǎn)8,除去報(bào)文來的方向如節(jié)點(diǎn)1)發(fā)送TTL值為1的査詢報(bào)文。如果查詢沒有成功 則向次高級(jí)的節(jié)點(diǎn)發(fā)送TTL值為T的査詢報(bào)文,依次類推直到查詢到報(bào)文,或向所有的鄰 居節(jié)點(diǎn)都發(fā)送TTL值為T的査詢報(bào)文,這樣就融合了水波擴(kuò)散的算法分級(jí)分次多次査找??梢宰C明,在不限制次數(shù)或TTL值的情況下,對(duì)全連通的網(wǎng)絡(luò),査詢算法總是能査遍 網(wǎng)絡(luò)中的所有節(jié)點(diǎn),即具有100%的査全率。這樣,每個(gè)節(jié)點(diǎn)的最高級(jí)鄰接點(diǎn)充當(dāng)了超級(jí)節(jié)點(diǎn)的角色,轉(zhuǎn)發(fā)TTL值較大的査詢報(bào)文, 當(dāng)網(wǎng)絡(luò)的聚集度較大時(shí),使得網(wǎng)絡(luò)報(bào)文轉(zhuǎn)發(fā)的范圍限制在一定的范圍內(nèi),大大減少網(wǎng)絡(luò)中 報(bào)文的數(shù)量。以上所述僅是本發(fā)明的實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的學(xué)者來說,在不脫離 本發(fā)明方法原理的前提下,還可以作出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明 的保護(hù)范圍。
權(quán)利要求
1. 一種資源的級(jí)別自適應(yīng)搜索方法,其特征在于包括如下歩驟1) 設(shè)計(jì)相應(yīng)的通信協(xié)議,協(xié)議中引入querylist字段,用來保存到達(dá)目的節(jié)點(diǎn)跨越 整個(gè)網(wǎng)絡(luò)的逐跳路徑;2) 將鄰居節(jié)點(diǎn)劃分為不同的等級(jí),作為自己搜索資源的依據(jù);3) 節(jié)點(diǎn)進(jìn)行資源搜索時(shí),采用向超級(jí)節(jié)點(diǎn)深度擴(kuò)展、向其他鄰居節(jié)點(diǎn)廣度擴(kuò)展的資 源搜索方式分級(jí)分次地進(jìn)行査詢;4) 對(duì)于網(wǎng)絡(luò)的動(dòng)態(tài)變化,利用探測(cè)心跳來實(shí)時(shí)更新自己的鄰居節(jié)點(diǎn)表5) 每個(gè)節(jié)點(diǎn)根據(jù)自己的負(fù)載能力對(duì)自己的鄰居節(jié)點(diǎn)數(shù)目加以限制,從而達(dá)到平衡負(fù) 載的目的。
2. 如權(quán)利要求l所述的資源的級(jí)別自適應(yīng)搜索方法,其特征在于 所述歩驟l)中通過以下四個(gè)基本的通訊協(xié)議實(shí)現(xiàn)相互間的協(xié)作,完成對(duì)等網(wǎng)絡(luò)中對(duì)等節(jié)點(diǎn)的發(fā)現(xiàn)及資源的定位Ping、 Pong、 Query、 QueryHit,其中Ping和Pong消息用來 確定節(jié)點(diǎn)的在線情況,Query及QueryHit消息用來實(shí)現(xiàn)資源査詢。
3. 如權(quán)利要求2所述的資源的級(jí)別自適應(yīng)搜索方法,其特征在于所述各消息的內(nèi)容 格式和含義如下Ping、 Pong、 Query、 QueryHit四個(gè)消息都包含一個(gè)由字段Sender、 PacketID、 Type、 TTL、 Payload組成的消息頭,其中,Sender字段記錄了發(fā)送消息節(jié)點(diǎn)的ID和AP信息, PacketID為消息的ID,由消息的源發(fā)節(jié)點(diǎn)隨機(jī)產(chǎn)生,Type字段為消息的類型,分別用不 同的值來區(qū)分Ping、 Pong、 Query、 QueryHit四個(gè)消息,TTL字段為消息的生命值,節(jié)點(diǎn) 收到消息時(shí)將TTL減1,如果TTL為0則不會(huì)對(duì)消息進(jìn)行轉(zhuǎn)發(fā),Payload字段為消息的長(zhǎng) 度;Ping消息用來確定網(wǎng)絡(luò)中節(jié)點(diǎn)的活動(dòng)狀態(tài),即確定節(jié)點(diǎn)是否仍然在線,Ping消息只 有消息頭,沒有其他內(nèi)容;Pong消息則用來回應(yīng)Ping消息,Pong消息只有消息頭,沒有其他內(nèi)容;Query消息是對(duì)資源的查詢請(qǐng)求,其消息格式包括字段Source、 Search、 QueryList, 其中Source字段記錄了 Query消息的源發(fā)節(jié)點(diǎn),Search字段記錄了需要査詢的信息, QueryList字段是一串節(jié)點(diǎn)鏈表,建立了到達(dá)目的節(jié)點(diǎn)的跨越整個(gè)網(wǎng)絡(luò)的逐跳路徑QueryHit消息標(biāo)志著查詢成功,其格式包括字段Result和QueryList,其中Result字 段記錄了査詢的結(jié)果,QueryList字段的含義與Query消息相同。
4. 如權(quán)利要求l所述的資源的級(jí)別自適應(yīng)搜索方法,其特征在于 在所述歩驟2)中,將鄰居節(jié)點(diǎn)劃分為不同等級(jí)的歩驟進(jìn)一歩分為以下子歩驟2. 1)每個(gè)節(jié)盧根據(jù)各鄰居節(jié)點(diǎn)以往對(duì)自己的幫助對(duì)各鄰居節(jié)點(diǎn)進(jìn)行量化,得出對(duì)于各 鄰居節(jié)點(diǎn)的信任值; 2.2)根據(jù)信任值,節(jié)點(diǎn)將自己的鄰居節(jié)點(diǎn)劃分等級(jí),信任值高的節(jié)點(diǎn)為高級(jí)別節(jié)點(diǎn), 信任值低的節(jié)點(diǎn)為低級(jí)別,將最高級(jí)別的鄰居節(jié)點(diǎn)作為節(jié)點(diǎn)的超級(jí)節(jié)點(diǎn)。
5. 如權(quán)利要求l所述的資源的級(jí)別自適應(yīng)搜索方法,其特征在于 在所述歩驟3)中,節(jié)點(diǎn)進(jìn)行資源査找和搜索的歩驟進(jìn)一歩分為以下子歩驟3. 1)向超級(jí)節(jié)點(diǎn)發(fā)送TTL值為T的査詢報(bào)文,而向其它鄰居節(jié)點(diǎn)發(fā)送TTL值為1的査 詢報(bào)文;3. 2)收到査詢報(bào)文的節(jié)點(diǎn)按同樣的方法向其鄰居節(jié)點(diǎn)發(fā)送查詢報(bào)文; 3. 3)如果查詢沒有成功則向次高級(jí)的節(jié)點(diǎn)發(fā)送TTL值為T的査詢報(bào)文;3. 4)依次類推,直到査詢到報(bào)文,或向所有的鄰居節(jié)點(diǎn)都發(fā)送了 TTL值為T的査詢報(bào)文。
6. 如權(quán)利要求l所述的資源的級(jí)別自適應(yīng)搜索方法,其特征在于 在所述歩驟4)中,利用探測(cè)心跳來實(shí)時(shí)更新自己的鄰居節(jié)點(diǎn)表的步驟進(jìn)一步分為以下子歩驟-4. 1)節(jié)點(diǎn)根據(jù)級(jí)別給每個(gè)鄰居節(jié)點(diǎn)設(shè)定一個(gè)心跳值; 4. 2)每隔一段時(shí)間減少鄰居節(jié)點(diǎn)的心跳值;4. 3)檢査該心跳值,當(dāng)某個(gè)鄰居節(jié)點(diǎn)的心跳值小于0,節(jié)點(diǎn)認(rèn)為該鄰居節(jié)點(diǎn)已失效,便 斷丌與其的鄰接關(guān)系,防止無效節(jié)點(diǎn)信息的堆積;當(dāng)某個(gè)鄰居節(jié)點(diǎn)的心跳值為O時(shí),節(jié)點(diǎn) 向該鄰居節(jié)點(diǎn)發(fā)送"心跳"信息,并等待回復(fù),若收到鄰居節(jié)點(diǎn)的回復(fù),節(jié)點(diǎn)就恢復(fù)鄰居 節(jié)點(diǎn)的心跳值,如果該鄰居節(jié)點(diǎn)沒有回應(yīng),則轉(zhuǎn)歩驟4.2)。
7. 如權(quán)利要求l所述的資源的級(jí)別自適應(yīng)搜索方法,其特征在于 在所述歩驟5)中,每個(gè)節(jié)點(diǎn)根據(jù)自己的負(fù)載能力對(duì)自己的鄰居節(jié)點(diǎn)數(shù)目加以限制的歩驟進(jìn)一歩分為以下子歩驟5. l)節(jié)點(diǎn)收到節(jié)點(diǎn)i要求連接的請(qǐng)求后,首先判斷自己的鄰居節(jié)點(diǎn)數(shù)Naj是否超過預(yù) 先設(shè)定的最大值mj;5.2) 如果naj〈mj,則接受節(jié)點(diǎn)i的請(qǐng)求;如果naj-mj,則査看鄰居節(jié)點(diǎn)中本地信任值 最小的節(jié)點(diǎn)k,判斷其本地信任值TS(j,k)是否小于節(jié)點(diǎn)i的初始值TS(j,i):如果 TS(j,k)〈-TS(j,i),節(jié)點(diǎn)j就斷丌和節(jié)點(diǎn)k的連接,接受節(jié)點(diǎn)i的連接請(qǐng)求,與節(jié)點(diǎn)i建立鄰 接關(guān)系,如果TS(j,k)〉 TS(j,i),節(jié)點(diǎn)j就拒絕節(jié)點(diǎn)i的連接請(qǐng)求,不與節(jié)點(diǎn)i建立鄰接關(guān) 系;5.3) 節(jié)點(diǎn)i繼續(xù)向網(wǎng)絡(luò)中的其它節(jié)點(diǎn)提出要求連接的請(qǐng)求,直至找到可以接受其連接 請(qǐng)求的節(jié)點(diǎn);5.4) 節(jié)點(diǎn)退出網(wǎng)絡(luò)時(shí),斷丌其與各鄰居節(jié)點(diǎn)的連接,但保留網(wǎng)絡(luò)中鄰居節(jié)點(diǎn)的本地信 任值作為以后査詢和搜索的基礎(chǔ)。
全文摘要
本發(fā)明公開了一種基于級(jí)別自適應(yīng)的對(duì)等網(wǎng)絡(luò)的資源搜索方法。包含以下步驟1)利用歷史訪問的統(tǒng)計(jì)結(jié)果評(píng)定節(jié)點(diǎn)對(duì)自己的貢獻(xiàn)來各自獨(dú)立的評(píng)價(jià)超級(jí)節(jié)點(diǎn),作為搜索的依據(jù);2)采用向超級(jí)節(jié)點(diǎn)深度擴(kuò)展、向其他鄰居節(jié)點(diǎn)廣度擴(kuò)展的資源搜索方式;3)設(shè)定與鄰居節(jié)點(diǎn)級(jí)別有關(guān)的心跳探測(cè)模式,融合了水波擴(kuò)散的算法分級(jí)分次的進(jìn)行查詢。本發(fā)明考慮到非結(jié)構(gòu)化的對(duì)等網(wǎng)絡(luò),一般以廣播方式作為其搜索的基本策略,引發(fā)較大的網(wǎng)絡(luò)流量,因此,提出改進(jìn)的搜索策略,從而縮小洪泛的范圍,降低了網(wǎng)絡(luò)開銷,并且提高了資源查找的效率。
文檔編號(hào)G06F17/30GK101123609SQ20071012158
公開日2008年2月13日 申請(qǐng)日期2007年9月10日 優(yōu)先權(quán)日2007年9月10日
發(fā)明者威 吳, 忠 周, 玲 沈, 蔡軍霞, 趙沁平 申請(qǐng)人:北京航空航天大學(xué)