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