專利名稱:一種對等網(wǎng)絡中數(shù)據(jù)遷移的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及對等(P2P, Peer-to-Peer)網(wǎng)絡技術(shù),特別涉及一種P2P網(wǎng)絡中數(shù)據(jù)遷移的方法及系統(tǒng)。
背景技術(shù):
近年來,P2P網(wǎng)絡技術(shù)作為一種分 布式互聯(lián)網(wǎng)技術(shù),發(fā)展非常迅速。與傳統(tǒng)的客戶端/服務器(C/S,Client/server)技術(shù)不同的是P2P網(wǎng)絡中的所有節(jié)點均可作為服務器和客戶端。P2P網(wǎng)絡中的數(shù)據(jù)以分布式存儲在節(jié)點上,業(yè)務由節(jié)點通過分布式實現(xiàn)。由于P2P網(wǎng)絡中的所有節(jié)點均存儲有網(wǎng)絡運行所必需的數(shù)據(jù),因此,當有節(jié)點加入、或退出網(wǎng)絡、或進行負載均衡時,節(jié)點之間需要進行數(shù)據(jù)遷移,即將某個節(jié)點所保存的數(shù)據(jù)拷貝到另一個節(jié)點上,以確保數(shù)據(jù)不會丟失,并維持數(shù)據(jù)的完整性。舉個例子來說,在目前廣泛應用的資源定位與發(fā)現(xiàn)(RELOAD, REsource LOcation And Discovery) P2P網(wǎng)絡協(xié)議中,數(shù)據(jù)是以資源的形式組織的。網(wǎng)絡為每個資源分配一個全網(wǎng)唯一的資源標識,用于查找該資源標識下的數(shù)據(jù)。每個節(jié)點可以負責一個或多個資源標識的數(shù)據(jù)存儲及處理。在新節(jié)點加入時,原有的負責節(jié)點會將加入節(jié)點應負責的資源標識下的數(shù)據(jù)發(fā)送給加入節(jié)點。當節(jié)點退出時,退出節(jié)點會將自身負責的資源標識下的數(shù)據(jù)發(fā)送給新的負責節(jié)點。這樣,在節(jié)點變動時,網(wǎng)絡中始終保持每個資源標識下的數(shù)據(jù)都有一個對應節(jié)點負責。下面以節(jié)點加入流程為例,描述現(xiàn)有技術(shù)中數(shù)據(jù)的遷移流程,如圖I所示,包括以下步驟步驟101 :加入節(jié)點希望加入P2P網(wǎng)絡中時,向引導節(jié)點發(fā)送接入請求,同引導節(jié)點建立連接;步驟102 :在引導節(jié)點的引導下,加入節(jié)點同接納節(jié)點建立連接;這里,所述接納節(jié)點就是指當前負責存儲加入節(jié)點所需獲取的數(shù)據(jù)的節(jié)點。步驟103 :加入節(jié)點向接納節(jié)點發(fā)送加入請求,請求接入P2P網(wǎng)絡,并且希望接管接納節(jié)點的部分資源標識下的數(shù)據(jù);步驟104 :接納節(jié)點將需要轉(zhuǎn)移的資源標識下的數(shù)據(jù)發(fā)送給加入節(jié)點;步驟105 :如果數(shù)據(jù)量比較大,接納節(jié)點則可以分多次發(fā)送數(shù)據(jù),直至所有數(shù)據(jù)全部都發(fā)送完畢;步驟106 :數(shù)據(jù)發(fā)送完畢后,接納節(jié)點通知加入節(jié)點更新P2P網(wǎng)絡路由,加入節(jié)點正式負責該部分數(shù)據(jù)的存儲和處理;步驟107 :加入節(jié)點向其它相關(guān)節(jié)點發(fā)送路由更新,通知已正式加入P2P網(wǎng)絡。從上面的描述中可以看出,在現(xiàn)有的遷移流程中,數(shù)據(jù)遷移時,需要將加入節(jié)點所請求的所有數(shù)據(jù)通過網(wǎng)絡發(fā)送給加入節(jié)點。即使通過私有網(wǎng)絡發(fā)送所有數(shù)據(jù),由于數(shù)據(jù)量較大,依然會對網(wǎng)絡造成較為嚴重地沖擊,這里,所述私有網(wǎng)絡具體可以是運營商的專用網(wǎng)絡等,且私有網(wǎng)絡的網(wǎng)絡連接速度大大快于互聯(lián)網(wǎng)的網(wǎng)絡連接速度。另外,如果P2P網(wǎng)絡中的節(jié)點分布在互聯(lián)網(wǎng)上,則節(jié)點間的網(wǎng)絡連接速度可能會比較慢,在這種情況下,加入節(jié)點所請求的所有數(shù)據(jù)在傳輸過程中容易出錯,且傳輸時間比較長,此時,由于加入節(jié)點必須在獲取所有的數(shù)據(jù)后才能正式加入P2P網(wǎng)絡,因此,會造成完成節(jié)點加入或負載均衡的過程需要的時間較長。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種P2P網(wǎng)絡中數(shù)據(jù)遷移的方法及系統(tǒng),能大大減少P2P網(wǎng)絡中數(shù)據(jù)遷移的數(shù)據(jù)量及遷移時間,進而提高數(shù)據(jù)遷移的速度及可靠性。為達到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的本發(fā)明提供了一種P2P網(wǎng)絡中數(shù)據(jù)遷移的方法,該方法包括需要進行數(shù)據(jù)遷移時,需要遷出數(shù)據(jù)的節(jié)點將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與遷入節(jié) 點對應的數(shù)據(jù)版本進行比較,確定增量數(shù)據(jù),并將增量數(shù)據(jù)發(fā)送給遷入節(jié)點;遷入節(jié)點根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù)。上述方案中,在將增量數(shù)據(jù)發(fā)送給遷入節(jié)點后,該方法進一步包括需要遷出數(shù)據(jù)的節(jié)點保存自身當前版本的遷移數(shù)據(jù)。上述方案中,需要進行數(shù)據(jù)遷移的時機為有節(jié)點加入對等網(wǎng)絡時,或者,有節(jié)點退出對等網(wǎng)絡時,或者,對等網(wǎng)絡中有節(jié)點負載超載,需要均衡負載時,或者,由于管理原因需要均衡負載時,或者,需要增加節(jié)點作為對等網(wǎng)絡中的節(jié)點的數(shù)據(jù)的備份時。上述方案中,所述需要遷出數(shù)據(jù)的節(jié)點將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與遷入節(jié)點對應的數(shù)據(jù)版本進行比較,為需要遷出數(shù)據(jù)的節(jié)點將自身當前的遷移數(shù)據(jù)的數(shù)據(jù)版本信息與遷入節(jié)點的數(shù)據(jù)版本信息進行比較。上述方案中,所述數(shù)據(jù)版本信息為數(shù)據(jù)版本號、和/或為修改時間戳、和/或為數(shù)據(jù)的摘要信息。上述方案中,所述需要遷出數(shù)據(jù)的節(jié)點將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與遷入節(jié)點對應的數(shù)據(jù)版本進行比較,為需要遷出數(shù)據(jù)的節(jié)點將自身當前的遷移數(shù)據(jù)的哈希值與遷入節(jié)點對應的哈希值進行比較。上述方案中,所述需要遷出數(shù)據(jù)的節(jié)點將自身當前的遷移數(shù)據(jù)的哈希值與遷入節(jié)點對應的哈希值進行比較,為采用Merkel樹的哈希對比方式,或者,采用可變粒度的哈希對比方式。上述方案中,所述遷入節(jié)點根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù),為遷入節(jié)點采用增量數(shù)據(jù)中的數(shù)據(jù)內(nèi)容,修改自身存儲的數(shù)據(jù)中對應的數(shù)據(jù)內(nèi)容,得到最新版本的數(shù)據(jù)。本發(fā)明還提供了一種P2P網(wǎng)絡中數(shù)據(jù)遷移的系統(tǒng),該系統(tǒng)包括第一節(jié)點、以及第二節(jié)點;其中,第一節(jié)點,用于需要進行數(shù)據(jù)遷移時,將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與第二節(jié)點對應的數(shù)據(jù)版本進行比較,確定增量數(shù)據(jù),并將增量數(shù)據(jù)發(fā)送給第二節(jié)點;
第二節(jié)點,用于收到第一節(jié)點發(fā)送的增量數(shù)據(jù)后,根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù)。上述方案中,所述第二節(jié)點的個數(shù)為一個以上。上述方案中,所述第一節(jié)點,還用于將增量數(shù)據(jù)發(fā)送給第二節(jié)點后,保存自身當前版本的遷移數(shù)據(jù)。本發(fā)明提供的P2P網(wǎng)絡中數(shù)據(jù)遷移的方法及系統(tǒng),需要進行數(shù)據(jù)遷移時,需要遷出數(shù)據(jù)的節(jié)點將自身當前的數(shù)據(jù)版本與遷入節(jié)點的數(shù)據(jù)版本進行比較,確定增量數(shù)據(jù),并將增量數(shù)據(jù)發(fā)送給遷入節(jié)點;遷入節(jié)點根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù),需要遷出數(shù)據(jù)的節(jié)點不需要將所有需要遷出的數(shù)據(jù)均發(fā)送給遷入節(jié)點,只將增量數(shù)據(jù)發(fā)送給遷入節(jié)點,如此,能大大減少P2P網(wǎng)絡中數(shù)據(jù)遷移的數(shù)據(jù)量及遷移時間,進而提高數(shù)據(jù)遷移的速度及可靠性。 除此以外,在將增量數(shù)據(jù)發(fā)送給遷入節(jié)點后,需要遷出數(shù)據(jù)的節(jié)點保存自身當前版本的遷移數(shù)據(jù),如此,當需要遷出數(shù)據(jù)的節(jié)點再次負責相應的數(shù)據(jù)時,能減少數(shù)據(jù)的傳輸量,進一步提高數(shù)據(jù)遷移的速度及可靠性,保證網(wǎng)絡的正常運行。
圖I為現(xiàn)有技術(shù)中節(jié)點加入流程中數(shù)據(jù)的遷移流程示意圖;圖2為本發(fā)明P2P網(wǎng)絡中數(shù)據(jù)遷移的方法流程示意圖;圖3為實施例一實現(xiàn)數(shù)據(jù)遷移的方法流程示意圖;圖4為實施例二實現(xiàn)數(shù)據(jù)遷移的方法流程示意圖;圖5為實施例三實現(xiàn)數(shù)據(jù)遷移的方法流程示意圖;圖6為Merkel樹的哈希值生成方式示意圖;圖7為本發(fā)明P2P網(wǎng)絡中數(shù)據(jù)遷移的系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式下面結(jié)合附圖及具體實施例對本發(fā)明再作進一步詳細的說明。本發(fā)明P2P網(wǎng)絡中數(shù)據(jù)遷移的方法,如圖2所示,包括以下步驟步驟201 :需要進行數(shù)據(jù)遷移時,需要遷出數(shù)據(jù)的節(jié)點將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與遷入節(jié)點對應的數(shù)據(jù)版本進行比較,確定增量數(shù)據(jù),并將增量數(shù)據(jù)發(fā)送給遷入節(jié)點;這里,需要進行數(shù)據(jù)遷移的時機為有節(jié)點加入P2P網(wǎng)絡時,或者,有節(jié)點退出P2P網(wǎng)絡時,或者,P2P網(wǎng)絡中有節(jié)點負載超載,需要均衡負載時,或者,由于管理原因需要均衡負載時,或者,需要增加節(jié)點作為某個節(jié)點的數(shù)據(jù)的備份時;所述遷入節(jié)點的個數(shù)為一個以上;在比較時,需要遷出數(shù)據(jù)的節(jié)點可以通過比較遷移數(shù)據(jù)當前的數(shù)據(jù)版本信息與遷入節(jié)點對應的數(shù)據(jù)版本信息,確定增量數(shù)據(jù);或者,可以通過哈希(hash)值對比的方式確定增量數(shù)據(jù);其中,所述數(shù)據(jù)版本信息是指遷出數(shù)據(jù)的節(jié)點能根據(jù)所述數(shù)據(jù)版本信息及自身的相關(guān)信息即可確定出增量數(shù)據(jù)的信息,所述數(shù)據(jù)版本信息具體可以是數(shù)據(jù)版本號、和/或修改時間戳、和/或數(shù)據(jù)的摘要信息等;當遷入節(jié)點沒有相關(guān)的數(shù)據(jù)版本信息時,所述數(shù)據(jù)版本信息具體還可以是表示空的字符;
通過哈希值對比的方式確定增量數(shù)據(jù)的具體處理過程可采用現(xiàn)有的哈希值對比的處理過程;所述哈希值對比的方式具體可以是Merkel樹的哈希對比方式或可變粒度的哈希對比方式等;所述增量數(shù)據(jù)是指需要遷出數(shù)據(jù)的節(jié)點與遷入節(jié)點不一致的數(shù)據(jù),具體可以是修改過的資源標識下的全部數(shù)據(jù)、或特定資源數(shù)據(jù)段下的全部數(shù)據(jù)、或數(shù)據(jù)修改的日志信
息等;在將增量數(shù)據(jù)發(fā)送給遷入節(jié)點后,該方法進一步包括需要遷出數(shù)據(jù)的節(jié)點保存自身當前版本的遷移數(shù)據(jù)。步驟202 :遷入節(jié)點根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù);
具體地,采用增量數(shù)據(jù)中的數(shù)據(jù)內(nèi)容,修改自身存儲的數(shù)據(jù)中對應的數(shù)據(jù)內(nèi)容,得到最新版本的數(shù)據(jù);舉個例子來說,假設增量數(shù)據(jù)包含第100條數(shù)據(jù)的內(nèi)容為123456,則遷入節(jié)點將自身存儲的第100條數(shù)據(jù)的內(nèi)容修改為123456 ;再舉個例子來說,假設增量數(shù)據(jù)包含第100條數(shù)據(jù)修改為123456的日志信息,則遷入節(jié)點根據(jù)該日志信息,將自身存儲的第100條數(shù)據(jù)的內(nèi)容修改為123456。下面結(jié)合實施例對本發(fā)明再作進一步詳細的描述。實施例一本實施例的應用場景為節(jié)點加入過程,在以下的描述中,將請求加入的節(jié)點稱為加入節(jié)點,將當前正在負責存儲加入節(jié)點所需獲取數(shù)據(jù)的節(jié)點稱為接納節(jié)點。本實施例實現(xiàn)數(shù)據(jù)遷移的方法,如圖3所示,包括以下步驟步驟301 :加入節(jié)點希望加入到P2P網(wǎng)絡中,向引導節(jié)點發(fā)送接入請求,同引導節(jié)
點建立連接。步驟302 :在引導節(jié)點的引導下,加入節(jié)點同接納節(jié)點建立連接。步驟303 :加入節(jié)點向接納節(jié)點發(fā)送加入請求,請求加入P2P網(wǎng)絡,并且希望接管接納節(jié)點的部分資源標識下的數(shù)據(jù);這里,加入節(jié)點利用現(xiàn)有技術(shù)可獲知應接管接納節(jié)點的哪部分資源標識下的數(shù)據(jù)。步驟304 :接納節(jié)點針對加入節(jié)點請求的資源標識,向加入節(jié)點請求對應的本地存儲的數(shù)據(jù)版本信息。步驟305 :加入節(jié)點將對應的數(shù)據(jù)版本信息發(fā)送給接納節(jié)點;這里,在步驟303中,加入節(jié)點還可以直接將請求的資源標識對應的本地存儲的數(shù)據(jù)版本信息發(fā)送給接納節(jié)點,此時,則不需要再執(zhí)行步驟304 305 ;這里,所述數(shù)據(jù)版本信息為接納節(jié)點能根據(jù)所述數(shù)據(jù)版本信息及自身的相關(guān)信息即可確定出增量數(shù)據(jù)的信息,所述數(shù)據(jù)版本信息具體可以是數(shù)據(jù)的版本號、和/或修改時間戳、和/或數(shù)據(jù)的摘要信息等;當加入節(jié)點完全沒有所請求的資源標識下的數(shù)據(jù)時,所述數(shù)據(jù)版本信息具體還可以是表示空的字符。步驟306 :接納節(jié)點將自身存儲的數(shù)據(jù)版本信息與加入節(jié)點的數(shù)據(jù)版本信息進行對比,確定需要提供給加入節(jié)點的增量數(shù)據(jù);這里,在進行對比時,如果由于加入節(jié)點的數(shù)據(jù)版本信息過于陳舊,使得接納節(jié)點無法進行對比,此時,接納節(jié)點可以和加入節(jié)點進行消息交互,進行哈希值對比,直至確定出增量數(shù)據(jù);當數(shù)據(jù)版本信息為表示空的字符時,所述增量數(shù)據(jù)為加入節(jié)點所請求的資源標識下的所有數(shù)據(jù)。步驟307 :接納節(jié)點將增量數(shù)據(jù)發(fā)送給加入節(jié)點;這里,當增量數(shù)據(jù)的數(shù)據(jù)量比較大時,可以分多次發(fā)送數(shù)據(jù),具體處理過程可采用現(xiàn)有的處理過程。步驟308 :增量數(shù)據(jù)發(fā)送完畢后,加入節(jié)點根據(jù)本地存儲的數(shù)據(jù)和收到的增量數(shù) 據(jù)恢復出最新版本的數(shù)據(jù),同時,接納節(jié)點通知加入節(jié)點更新P2P網(wǎng)絡路由,加入節(jié)點正式負責所請求的資源標識下的數(shù)據(jù)的存儲和處理;這里,接納節(jié)點將已遷出的當前版本數(shù)據(jù)存儲在本地緩存中,以備后續(xù)使用,在存儲時,接納節(jié)點可以選擇部分數(shù)據(jù)進行存儲,比如準靜態(tài)數(shù)據(jù)等;其中,所述準靜態(tài)數(shù)據(jù)是指在資源標識下隨時間變化不大的數(shù)據(jù);另外,在存儲時,接納節(jié)點還可以依據(jù)需要刪除部分陳舊的數(shù)據(jù),用當前版本的遷移數(shù)據(jù)代替這些陳舊的數(shù)據(jù),比如依據(jù)數(shù)據(jù)的使用頻率等信息,刪除使用頻率相對較低的數(shù)據(jù),以節(jié)約本地緩存資源。步驟309 :加入節(jié)點向其它相關(guān)節(jié)點發(fā)送路由更新,通知已正式加入P2P網(wǎng)絡。這里,需要說明的是對于節(jié)點退出流程和負載均衡流程中節(jié)點確定增量數(shù)據(jù)的過程與本實施例提供的過程類似,所不同的是加入節(jié)點和接納節(jié)點分別替換為數(shù)據(jù)遷移的目標節(jié)點和源節(jié)點,并針對不同的流程在消息上進行相應的修改。舉個例子來說,在節(jié)點退出流程中,數(shù)據(jù)遷移的目標節(jié)點為新負責節(jié)點,而源節(jié)點則為退出節(jié)點;在負載均衡流程中,數(shù)據(jù)遷移的目標節(jié)點為輕載節(jié)點,而源節(jié)點則為過載節(jié)點。這些修改可以在現(xiàn)有的節(jié)點退出和負載均衡流程中直接得出,這里不再贅述。實施例二 本實施例的應用場景為節(jié)點加入過程,且請求的數(shù)據(jù)包含準靜態(tài)數(shù)據(jù)及動態(tài)數(shù)據(jù);其中,所述準靜態(tài)數(shù)據(jù)是指在資源標識下隨時間變化不大的數(shù)據(jù),所述動態(tài)數(shù)據(jù)是指在資源標識下經(jīng)常變化的數(shù)據(jù)。在實際應用時,數(shù)據(jù)是準靜態(tài)數(shù)據(jù)還是動態(tài)數(shù)據(jù)可以由具體的業(yè)務確定。例如,在P2P因特網(wǎng)協(xié)議(IP,Internet Protocol)電話服務中,每個用戶的所有數(shù)據(jù)可以存儲在同一個資源標識下,但是,其中的用戶號碼信息、及用戶服務簽約信息等變化較少,因此,可以作為準靜態(tài)數(shù)據(jù)。而用戶的在線信息及位置信息變化較快,因此,可以作為動態(tài)數(shù)據(jù)。在以下的描述中,將請求加入的節(jié)點稱為加入節(jié)點,將當前正在負責存儲加入節(jié)點所需獲取數(shù)據(jù)的節(jié)點稱為接納節(jié)點。本實施例實現(xiàn)數(shù)據(jù)遷移的方法,如圖4所示,包括以下步驟步驟401 :加入節(jié)點希望加入到P2P網(wǎng)絡中,向引導節(jié)點發(fā)送接入請求,同引導節(jié)
點建立連接。步驟402 :在引導節(jié)點的引導下,加入節(jié)點同接納節(jié)點建立連接。步驟403 :加入節(jié)點向接納節(jié)點發(fā)送加入請求,請求加入P2P網(wǎng)絡,并且希望接管接納節(jié)點的部分資源標識下的數(shù)據(jù);這里,加入節(jié)點利用現(xiàn)有技術(shù)可獲知應接管接納節(jié)點的哪部分資源標識下的數(shù)據(jù)。步驟404 :接納節(jié)點針對加入節(jié)點請求的資源標識,要求加入節(jié)點發(fā)送所請求的資源標識下的準靜態(tài)數(shù)據(jù)的本地存儲的數(shù)據(jù)版本信息;這里,所述數(shù)據(jù)版本信息為接納節(jié)點能根據(jù)所述數(shù)據(jù)版本信息即可確定出增量數(shù)據(jù)的信息,所述數(shù)據(jù)版本信息具體可以是數(shù)據(jù)的版本號、和/或修改時間戳、和/或數(shù)據(jù)的摘要信息等;當加入節(jié)點完全沒有所請求的資源標識下的數(shù)據(jù)時,所述數(shù)據(jù)版本信息具體還可以是表示空的字符。步驟405 :加入節(jié)點將本地存儲的、所請求的資源標識下的準靜態(tài)數(shù)據(jù)的數(shù)據(jù)版本信息發(fā)送給接納節(jié)點;這里,在步驟403中,加入節(jié)點還可以直接將本地存儲的、所請求的資源標識下的準靜態(tài)數(shù)據(jù)的數(shù)據(jù)版本信息發(fā)送給接納節(jié)點,此時,則不需要再執(zhí)行步驟404 405 ;所述數(shù)據(jù)版本信息為接納節(jié)點能根據(jù)所述數(shù)據(jù)版本信息及自身的相關(guān)信息即可確定出增量數(shù)據(jù)的信息,所述數(shù)據(jù)版本信息具體可以是數(shù)據(jù)的版本號、和/或修改時間 戳、和/或數(shù)據(jù)的摘要信息等;當加入節(jié)點完全沒有所請求的資源標識下的數(shù)據(jù)時,所述數(shù)據(jù)版本信息具體還可以是表示空的字符。步驟406 :接納節(jié)點對比加入節(jié)點的準靜態(tài)數(shù)據(jù)版本信息,確定需要提供給加入節(jié)點的準靜態(tài)數(shù)據(jù)的增量數(shù)據(jù);這里,在進行對比時,如果由于加入節(jié)點的數(shù)據(jù)版本信息過于陳舊,使得接納節(jié)點無法進行對比,此時,接納節(jié)點可以和加入節(jié)點進行消息交互,進行哈希值對比,直至確定出增量數(shù)據(jù);當數(shù)據(jù)版本信息為表示空的字符時,所述增量數(shù)據(jù)為加入節(jié)點所請求的資源標識下的所有準靜態(tài)數(shù)據(jù)。步驟407 :接納節(jié)點將準靜態(tài)數(shù)據(jù)的增量數(shù)據(jù)發(fā)送給加入節(jié)點。步驟408 :準靜態(tài)數(shù)據(jù)的增量數(shù)據(jù)發(fā)送完成后,接納節(jié)點將所有的動態(tài)數(shù)據(jù)發(fā)送給加入節(jié)點;這里,本步驟還可以在步驟405、或步驟406、或步驟407之前執(zhí)行。步驟409 :數(shù)據(jù)發(fā)送完畢后,加入節(jié)點根據(jù)本地存儲的準靜態(tài)數(shù)據(jù)和收到的增量數(shù)據(jù)恢復出最新版本的準靜態(tài)數(shù)據(jù),并直接采用收到的動態(tài)數(shù)據(jù)作為最新版本的動態(tài)數(shù)據(jù),同時,接納節(jié)點通知加入節(jié)點更新P2P網(wǎng)絡路由,加入節(jié)點正式負責所請求的資源標識下的數(shù)據(jù)的存儲和處理;這里,接納節(jié)點將已遷出的準靜態(tài)數(shù)據(jù)存儲在本地緩存中,以備后續(xù)使用。同時,接納節(jié)點可以直接刪除遷出的動態(tài)數(shù)據(jù)。步驟410 :加入節(jié)點向其它相關(guān)節(jié)點發(fā)送路由更新,通知已正式加入P2P網(wǎng)絡。這里,需要說明的是對于節(jié)點退出流程和負載均衡流程中節(jié)點確定增量數(shù)據(jù)的過程與本實施例提供的過程類似,所不同的是加入節(jié)點和接納節(jié)點分別替換為數(shù)據(jù)遷移的目標節(jié)點和源節(jié)點,并針對不同的流程在消息上進行相應的修改。舉個例子來說,在節(jié)點退出流程中,數(shù)據(jù)遷移的目標節(jié)點為新負責節(jié)點,而源節(jié)點則為退出節(jié)點;在負載均衡流程中,數(shù)據(jù)遷移的目標節(jié)點為輕載節(jié)點,而源節(jié)點則為過載節(jié)點。這些修改可以在現(xiàn)有的節(jié)點退出和負載均衡流程中直接得出,這里不再贅述。實施例三本實施例的應用場景為數(shù)據(jù)版本信息為數(shù)據(jù)版本號,在以下的描述中,將遷出數(shù)據(jù)的節(jié)點稱為源節(jié)點,將遷入數(shù)據(jù)的節(jié)點稱為目標節(jié)點,本實施例實現(xiàn)數(shù)據(jù)遷移的方法,如圖5所示,包括以下步驟步驟501 :需要進行數(shù)據(jù)遷移時,目標節(jié)點向源節(jié)點發(fā)送本地存儲的數(shù)據(jù)版本號;這里,所述數(shù)據(jù)版本號的格式可以是依序增加的整數(shù)、主版本號加此版本號的格式或時間戳等格式,舉個例子來說,如果數(shù)據(jù)版本號的格式為依序增加的整數(shù),則數(shù)據(jù)版本號可以是1、2、3等等,如果數(shù)據(jù)版本號的格式為主版本號加此版本號的格式,則數(shù)據(jù)版本號可以是I. I>I- 2、1. 3等等。步驟502 :源節(jié)點收到目標節(jié)點發(fā)送的數(shù)據(jù)版本號后,將目標節(jié)點的數(shù)據(jù)版本號與自身當前的數(shù)據(jù)版本號進行比較,通過兩個版本之間的版本修改信息,確定需要提供給目標節(jié)點的增量數(shù)據(jù);這里,源節(jié)點事先會在當前數(shù)據(jù)版本號下記錄修改信息,所述修改信息具體可以是數(shù)據(jù)修改操作的記錄、或修改的資源標識記錄等,源節(jié)點據(jù)此可以獲知源節(jié)點與目標節(jié)點的兩個版本之間的版本修改信息;所述版本修改信息可以是數(shù)據(jù)修改操作的記錄、或修改的資源標識記錄等;在通過兩個版本之間的版本修改信息,確定需要提供給目標節(jié)點的增量數(shù)據(jù)時, 舉個例子來說,如果版本修改信息中包含對第100條數(shù)據(jù)進行數(shù)據(jù)修改的具體操作,則源節(jié)點根據(jù)這條信息,確定需要將第100條數(shù)據(jù)發(fā)送給目標節(jié)點,即第100條數(shù)據(jù)即為增量數(shù)據(jù)中的一條;在源節(jié)點將目標節(jié)點的數(shù)據(jù)版本號與自身當前的數(shù)據(jù)版本號進行比較時,如果源節(jié)點發(fā)現(xiàn)目標節(jié)點的數(shù)據(jù)版本號過于陳舊,導致自身沒有兩個版本之間的版本修改信息時,源節(jié)點可以將目標節(jié)點所請求的全部數(shù)據(jù)作為增量數(shù)據(jù),發(fā)送給目標節(jié)點,或者,源節(jié)點可以和目標節(jié)點進行消息交互,采用哈希值對比方式確定增量數(shù)據(jù),發(fā)送給目標節(jié)點;其中,采用哈希值對比方式確定增量數(shù)據(jù)的過程可采用現(xiàn)有的處理過程。步驟503 :源節(jié)點將增量數(shù)據(jù)發(fā)送給目標節(jié)點,目標節(jié)點收到增量數(shù)據(jù)后,根據(jù)本地存儲的數(shù)據(jù)和增量數(shù)據(jù)恢復出最新版本的數(shù)據(jù);這里,源節(jié)點可以將版本之間的版本修改信息一起發(fā)送給目標節(jié)點,以便目標節(jié)點能更好地恢復出最新版本的數(shù)據(jù);對于上述例子,目標節(jié)點收到增量數(shù)據(jù)后,將自身的第100條數(shù)據(jù)用增量數(shù)據(jù)中相應的數(shù)據(jù)進行修改,如此類推,從而恢復出最新版本的數(shù)據(jù)。步驟504 目標節(jié)點增加相應的數(shù)據(jù)版本號,以描述自身和源節(jié)點存儲的數(shù)據(jù)版本的區(qū)別;這里,修改數(shù)據(jù)版本號的操作還可以由源節(jié)點在步驟503中進行,所述數(shù)據(jù)版本號的功能為區(qū)別目標節(jié)點和源節(jié)點的數(shù)據(jù)版本,以便后續(xù)進行數(shù)據(jù)遷移時使用;在實際應用時,當目標節(jié)點或源節(jié)點的數(shù)據(jù)版本號過大時,可以刪除部分舊數(shù)據(jù)版本的數(shù)據(jù),舉個例子來說,目標節(jié)點或源節(jié)點當前的數(shù)據(jù)版本號為3. 5,3. 5之前的數(shù)據(jù)版本號對應的數(shù)據(jù)依然保存在硬盤當中,此時,可以將數(shù)據(jù)版本號為I之前的數(shù)據(jù)版本號對應的所有數(shù)據(jù)均刪除,以節(jié)約硬盤。在實際應用過程中,當采用數(shù)據(jù)版本號進行對比時,源節(jié)點需要記錄多個版本和當前版本的版本修改信息,以便能針對不同數(shù)據(jù)版本號,確定出增量數(shù)據(jù),此時,如果數(shù)據(jù)變化量比較大時,對應的版本修改信息的數(shù)據(jù)量也會相應的比較大,因此,源節(jié)點還可以采用哈希值對比的方式確定增量數(shù)據(jù);其中,所述哈希值對比的方式具體可以是=Merkel樹的哈希對比方式或可變粒度的哈希對比方式等。下面對Merkel樹的哈希對比方式及可變粒度的哈希對比方式分別進行詳細的描述。圖6為Merkel樹的哈希值生成方式示意圖,對于Merkel樹的對比方式,具體為首先,源節(jié)點和目標節(jié)點將需要對比的數(shù)據(jù)段按照最小粒度分段,比如按照單個資源標識或較小的資源標識段分段,之后對每個數(shù)據(jù)段分 別進行哈希值計算,得到葉節(jié)點的哈希值,如圖6中的葉節(jié)點C、D、E、及F的哈希值。隨后,節(jié)點對多個葉節(jié)點的哈希值再次進行哈希值計算,生成子樹節(jié)點的哈希值,如圖6中的子樹A、及B的哈希值,之后再對多個子樹節(jié)點的哈希值再次進行哈希值計算,如此循環(huán),直至生成根節(jié)點的哈希值。源節(jié)點在進行遷移數(shù)據(jù)的數(shù)據(jù)版本對比時,如圖6所示,首先比較根節(jié)點的哈希值,如果源節(jié)點與目標節(jié)點的根節(jié)點哈希值一致,則表明源節(jié)點與目標節(jié)點雙方的數(shù)據(jù)內(nèi)容完全一致,不需要傳送變化的數(shù)據(jù),如果根節(jié)點的哈希值不一致,則說明雙方數(shù)據(jù)內(nèi)容不同;源節(jié)點進一步分別比較每個子樹節(jié)點的哈希值,如果每個子樹節(jié)點的哈希值均一致,則說明每個子樹節(jié)點下所有的數(shù)據(jù)節(jié)點內(nèi)容均一致,源節(jié)點不需要傳送變化的數(shù)據(jù),如果子樹節(jié)點的哈希值不一致,則進一步比較不一致的子樹節(jié)點下的子節(jié)點的哈希值,如此循環(huán),直至到找到合適粒度的變化節(jié)點為止;確定了雙方數(shù)據(jù)內(nèi)容不一致的部分后,源節(jié)點將變化的數(shù)據(jù)作為增量數(shù)據(jù)發(fā)送給目標節(jié)點即可;其中,在實際應用時,所述合適粒度的變化節(jié)點可以是葉子節(jié)點或子樹節(jié)點。對于可變粒度的哈希對比方式的基本思想是判斷單個資源標識或最小資源標識段下的數(shù)據(jù)不一致的可能性。具體地,假設需要遷移n個資源標識下的數(shù)據(jù),設單個資源標識的數(shù)據(jù)變化的可能性為P,將源節(jié)點及目標節(jié)點的k個資源標識下的所有數(shù)據(jù)分別進行哈希值計算,并將得到哈希值進行對比,此時,k個資源標識的所有數(shù)據(jù)的哈希值不一致的可能性為I-(I-P)k;其中,在估算p值時,k可以取不同的大小,從而產(chǎn)生不同的粒度,對不同粒度上的數(shù)據(jù)段進行哈希值計算,并比較哈希不一致的情況,并且,對于一個粒度,還可以采用不同的數(shù)據(jù)段進行哈希值計算,并比較哈希值不一致的情況,以獲取較準確的哈希變化率數(shù)據(jù)。根據(jù)不同粒度的哈希變化率數(shù)據(jù),擬合出最有可能的P值;將p值代入公式k* = -I/(In (1-p)),得到最佳的哈希粒度,即k* ;將遷移數(shù)據(jù)的數(shù)據(jù)段按k*個資源標識分為等大小的數(shù)據(jù)段,生成n/V個哈希值,并進行對比,源節(jié)點在進行遷移數(shù)據(jù)的數(shù)據(jù)版本對比時,如果n/V個哈希值均一致,則說明源節(jié)點與目標節(jié)點雙方數(shù)據(jù)內(nèi)容完全一致,不需要進一步對比及傳送變化的數(shù)據(jù)。對于n/k*個哈希值中不一致的,則將不一致的哈希值對應的數(shù)據(jù)內(nèi)容不一致的數(shù)據(jù)段,重復上述過程,直至找到在最小粒度上數(shù)據(jù)發(fā)生變化的點;這里,P值可以重新估算或利用前次估計的P值推算。在迭代過程中,P值逐漸會增加,哈希粒度k會逐漸減小,在實際操作中,也可以強制要求每次k值至少縮小為原來的二分之一。上述實施例中,描述的P2P網(wǎng)絡中數(shù)據(jù)組織方式均是將數(shù)據(jù)按資源組織,每個資源擁有自己唯一的資源標識,同類資源按照特定的數(shù)據(jù)結(jié)構(gòu)來存儲相關(guān)數(shù)據(jù),特定的數(shù)據(jù)可通過資源標識索引來進行查找,每個節(jié)點可負責一部分資源標識空間段,即負責該資源標識段內(nèi)對應的資源數(shù)據(jù)的存儲和處理,所述處理包括讀取數(shù)據(jù)、更新數(shù)據(jù)、以及刪除數(shù)據(jù)等操作。這里,本領(lǐng)域的技術(shù)人員應當理解本發(fā)明可以很容易地擴展到其它數(shù)據(jù)結(jié)構(gòu)組織方式。本發(fā)明提供的技術(shù)方案,特別適用于P2P網(wǎng)絡中需要存儲大量準靜態(tài)數(shù)據(jù)的情況,比如在P2P互聯(lián)網(wǎng)協(xié)議語音(VoIP, Voice over Internet Protocol)系統(tǒng)中,P2P網(wǎng)絡中的節(jié)點需要保存用戶的簽約信息,這些信息變化量比較小,即為準靜態(tài)數(shù)據(jù),需要通過分布式系統(tǒng)存儲。如果節(jié)點加入或退出頻繁時,這些準靜態(tài)數(shù)據(jù)需要經(jīng)常在節(jié)點之間進行遷移并占用大量帶寬,采用本發(fā)明的技術(shù)方案后,數(shù)據(jù)遷移量可以大大減小,只需要傳輸改變的用戶簽約數(shù)據(jù)即可。本發(fā)明的技術(shù)方案也可適用于節(jié)點需要進行定時的負載調(diào)整的情況,比如每日定期進行負載調(diào)整。在這種情況下,P2P網(wǎng)絡會定期如在每日清晨喚醒和加入一部分節(jié)點 以應付可預見的大量業(yè)務,并定期如在每日夜晚讓部分節(jié)點退出以節(jié)約能源。在這種情況下,節(jié)點往往會重復負責某些數(shù)據(jù)和業(yè)務,采用本發(fā)明的技術(shù)方案后,節(jié)點只要在每次遷移時更新到最新版本的數(shù)據(jù)即可,如此,節(jié)點本地存儲的數(shù)據(jù)可以得到較好地利用?;谏鲜龇椒ǎ景l(fā)明還提供了一種P2P網(wǎng)絡中數(shù)據(jù)遷移的系統(tǒng),如圖7所示,該系統(tǒng)包括第一節(jié)點71、以及第二節(jié)點72 ;其中,第一節(jié)點71,用于需要進行數(shù)據(jù)遷移時,將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與第二節(jié)點72對應的數(shù)據(jù)版本進行比較,確定增量數(shù)據(jù),并將增量數(shù)據(jù)發(fā)送給第二節(jié)點72 ;第二節(jié)點72,用于收到第一節(jié)點71發(fā)送的增量數(shù)據(jù)后,根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù)。這里,需要說明的是所述第二節(jié)點72的個數(shù)為一個以上。所述第一節(jié)點71,還用于將增量數(shù)據(jù)發(fā)送給第二節(jié)點72后,保存自身當前版本的遷移數(shù)據(jù)。所述第二節(jié)點72,具體用于采用增量數(shù)據(jù)中的數(shù)據(jù)內(nèi)容,修改自身存儲的數(shù)據(jù)中對應的數(shù)據(jù),得到最新版本的數(shù)據(jù)。這里,本發(fā)明的所述系統(tǒng)中的第一節(jié)點的具體處理過程已在上文中詳述,不再贅述。以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。
權(quán)利要求
1.一種對等(P2P)網(wǎng)絡中數(shù)據(jù)遷移的方法,其特征在于,該方法包括 需要進行數(shù)據(jù)遷移時,需要遷出數(shù)據(jù)的節(jié)點將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與遷入節(jié)點對應的數(shù)據(jù)版本進行比較,確定增量數(shù)據(jù),并將增量數(shù)據(jù)發(fā)送給遷入節(jié)點; 遷入節(jié)點根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù)。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,在將增量數(shù)據(jù)發(fā)送給遷入節(jié)點后,該方法進一步包括 需要遷出數(shù)據(jù)的節(jié)點保存自身當前版本的遷移數(shù)據(jù)。
3.根據(jù)權(quán)利要求I所述的方法,其特征在于,需要進行數(shù)據(jù)遷移的時機為有節(jié)點加入對等網(wǎng)絡時,或者,有節(jié)點退出對等網(wǎng)絡時,或者,對等網(wǎng)絡中有節(jié)點負載超載,需要均衡負載時,或者,由于管理原因需要均衡負載時,或者,需要增加節(jié)點作為對等網(wǎng)絡中的節(jié)點的數(shù)據(jù)的備份時。
4.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于,所述需要遷出數(shù)據(jù)的節(jié)點將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與遷入節(jié)點對應的數(shù)據(jù)版本進行比較,為 需要遷出數(shù)據(jù)的節(jié)點將自身當前的遷移數(shù)據(jù)的數(shù)據(jù)版本信息與遷入節(jié)點的數(shù)據(jù)版本信息進行比較。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述數(shù)據(jù)版本信息為數(shù)據(jù)版本號、和/或為修改時間戳、和/或為數(shù)據(jù)的摘要信息。
6.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于,所述需要遷出數(shù)據(jù)的節(jié)點將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與遷入節(jié)點對應的數(shù)據(jù)版本進行比較,為 需要遷出數(shù)據(jù)的節(jié)點將自身當前的遷移數(shù)據(jù)的哈希值與遷入節(jié)點對應的哈希值進行比較。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述需要遷出數(shù)據(jù)的節(jié)點將自身當前的遷移數(shù)據(jù)的哈希值與遷入節(jié)點對應的哈希值進行比較,為 采用Merkel樹的哈希對比方式,或者,采用可變粒度的哈希對比方式。
8.根據(jù)權(quán)利要求1、2或3所述的方法,其特征在于,所述遷入節(jié)點根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù),為 遷入節(jié)點采用增量數(shù)據(jù)中的數(shù)據(jù)內(nèi)容,修改自身存儲的數(shù)據(jù)中對應的數(shù)據(jù)內(nèi)容,得到最新版本的數(shù)據(jù)。
9.一種對等網(wǎng)絡中數(shù)據(jù)遷移的系統(tǒng),其特征在于,該系統(tǒng)包括第一節(jié)點、以及第二節(jié)點;其中, 第一節(jié)點,用于需要進行數(shù)據(jù)遷移時,將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與第二節(jié)點對應的數(shù)據(jù)版本進行比較,確定增量數(shù)據(jù),并將增量數(shù)據(jù)發(fā)送給第二節(jié)點; 第二節(jié)點,用于收到第一節(jié)點發(fā)送的增量數(shù)據(jù)后,根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù)。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述第二節(jié)點的個數(shù)為一個以上。
11.根據(jù)權(quán)利要求9或10所述的系統(tǒng),其特征在于,所述第一節(jié)點,還用于將增量數(shù)據(jù)發(fā)送給第二節(jié)點后,保存自身當前版本的遷移數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種對等(P2P)網(wǎng)絡中數(shù)據(jù)遷移的方法,該方法包括需要進行數(shù)據(jù)遷移時,需要遷出數(shù)據(jù)的節(jié)點將遷移數(shù)據(jù)當前的數(shù)據(jù)版本與遷入節(jié)點對應的數(shù)據(jù)版本進行比較,確定增量數(shù)據(jù),并將增量數(shù)據(jù)發(fā)送給遷入節(jié)點;遷入節(jié)點根據(jù)增量數(shù)據(jù)及自身存儲的數(shù)據(jù),恢復出最新版本的數(shù)據(jù)。本發(fā)明同時公開了一種P2P網(wǎng)絡中數(shù)據(jù)遷移的系統(tǒng),采用本發(fā)明的方法及系統(tǒng),能大大減少P2P網(wǎng)絡中數(shù)據(jù)遷移的數(shù)據(jù)量及遷移時間,進而提高數(shù)據(jù)遷移的速度及可靠性。
文檔編號H04L29/08GK102739704SQ201110084259
公開日2012年10月17日 申請日期2011年4月2日 優(yōu)先權(quán)日2011年4月2日
發(fā)明者王煒, 陶全軍 申請人:中興通訊股份有限公司