馬黎艷
[摘要] 使用基于JXTA平臺的P2P分布式體系結(jié)構(gòu),采用Chord環(huán)路作為網(wǎng)絡的拓撲結(jié)構(gòu),節(jié)點ID和文件ID的生成則通過使用某種HASH算法如MD5,SHA等,設計了一個高可擴展、高可靠、高性能的分布式存儲系統(tǒng)。
[關鍵詞] P2P Chord JXTA 分布式存儲系統(tǒng)
一、引言
由于計算機通信技術(shù)的高速發(fā)展,網(wǎng)絡上的信息資源越來越多,訪問量也越來越大,基于傳統(tǒng)的集中式存儲方式已經(jīng)不能滿足用戶的需要。隨著P2P技術(shù)的發(fā)展,基于P2P的分布式存儲系統(tǒng)也相應地得到了快速發(fā)展。目前,已經(jīng)有很多比較成熟的P2P分布式文件存儲系統(tǒng),其中最典型的有:Napster、OceanStore、Past、Chord等文件存儲系統(tǒng)。這些系統(tǒng)的基本思想是將數(shù)據(jù)存儲、訪問與固定的位置分離開來,通過P2P網(wǎng)絡將Internet上零散的計算機連接起來,整合這些計算機上的空閑存儲資源,構(gòu)建出一個高可擴展、高可靠、高性能的分布式存儲系統(tǒng)。
二、相關技術(shù)
1.Chord簡介
Chord在2001年由麻省理工學院提出,其核心思想就是要解決如何在P2P網(wǎng)絡中找到存有特定數(shù)據(jù)的節(jié)點。Chord協(xié)議中其規(guī)定使用的散列算法為SHA-1,并在此基礎上提供了優(yōu)化的路由算法。
在Chord中,每個節(jié)點需要存儲m個其他節(jié)點的信息,這些信息的集合被稱為查詢表。表格中的節(jié)點不是直接相鄰的節(jié)點,它們的間距(ID間隔)將成2k的關系排列(k表示表中的數(shù)組下標)。這樣形成的節(jié)點之間路由關系實際上就是折半查找算法需要的排列關系。在查詢的過程中,查詢節(jié)點將請求發(fā)送到與鍵值最接近的節(jié)點上。收到查詢請求的節(jié)點如果發(fā)現(xiàn)自身存儲了被查詢的信息,可以直接回應查詢節(jié)點;如果被查詢的信息不在本地,就根據(jù)查詢表將請求轉(zhuǎn)發(fā)到與鍵值最接近的節(jié)點上。這樣的過程一直持續(xù)到找到相應的節(jié)點為止,查詢過程實際上就是折半查找的過程。
2.JXTA簡介
JXTA是Sun微系統(tǒng)對等網(wǎng)絡的標準,以它來促進和探究分布式計算的新方法。JXTA具體來說是一種標準組件平臺,它提供了用于開發(fā)分布式服務和應用程序的基本組件。整套技術(shù)由一組開放源碼的P2P協(xié)議組成,這組協(xié)議使網(wǎng)絡上任何連接著的計算設備的協(xié)作變?yōu)榭赡?。使用這些協(xié)議,節(jié)點可以互相合作來建立自我組織、自我管理的對等組,而不必關心它們在網(wǎng)絡中所處的位置(在網(wǎng)絡邊緣或者防火墻的后面),并且也不需要集中的管理機構(gòu)。
JXTA體系結(jié)構(gòu)由三層組成。應用層(Applications)包括了應用JXTA服務開發(fā)出來的完整的P2P應用程序。比如,P2P及時消息、文件和資源共享、P2P電子郵件系統(tǒng)、分布式存儲系統(tǒng)等。服務層(Services)包含一些網(wǎng)絡服務,提供了P2P網(wǎng)絡通用的功能,如查找、共享等機制、協(xié)議轉(zhuǎn)換等。核心層(JXTA Core)封裝了P2P網(wǎng)絡最基本的要素,包含了服務所需要的核心功能,包括對等體、對等組、對等體發(fā)現(xiàn)和相關的安全原語。
三、系統(tǒng)設計
系統(tǒng)采用JXTA平臺進行P2P的設計開發(fā),以Chord環(huán)路作為網(wǎng)絡的拓撲結(jié)構(gòu),節(jié)點ID和文件ID的生成則通過使用某種HASH算法如MD5,SHA等,文件的存儲與下載則使用CMS來管理。
1.節(jié)點加入與離開
Jxta為發(fā)現(xiàn)對等節(jié)點、對等組和其他信息提供了一個異步機制,所發(fā)布的關于對等節(jié)點或?qū)Φ冉M的信息被稱為通告,節(jié)點正是通過搜尋相應的通告來發(fā)現(xiàn)它所需要的資源。當節(jié)點X希望加入JXTA網(wǎng)絡時,首先,查找某個對等組內(nèi)的通告,發(fā)送加入請求,組內(nèi)其他節(jié)點收到該請求后做出響應。節(jié)點與第一個發(fā)出響應的節(jié)點Y通話,以便初始話本地節(jié)點查詢表(finger table)、跟新其他節(jié)點查詢表及轉(zhuǎn)移關鍵字信息。
新節(jié)點X以x+2i-1 (l≤i≤m)為消息key值向Y發(fā)出請求,查找消息的Successor節(jié)點和查詢表(finger table)項,以此填充自己的查詢表(finger table)項。當新節(jié)點完成了自己的路由信息組建之后,通知其他相關節(jié)點自己的加入,以逆時針的方向遞歸地通知相關節(jié)點更新自己的路由信息。最后,其他節(jié)點將所有鍵值歸屬于X的關鍵字(即后繼節(jié)點是X的關鍵字)轉(zhuǎn)移到節(jié)點X上。當節(jié)點加入時首先通過哈希函數(shù)產(chǎn)生節(jié)點ID,然后找到ID 相鄰的兩個節(jié)點作為此節(jié)點的前驅(qū)和后繼節(jié)點,系統(tǒng)中每個節(jié)點都保留其鄰近的前驅(qū)和后繼節(jié)點信息。當節(jié)點退出時,此節(jié)點的前驅(qū)節(jié)點需將其后繼更新為退出節(jié)點的后繼節(jié)點。
2.系統(tǒng)通信
系統(tǒng)采用Java事件處理機制和Jxta自身的管道通信機制,實現(xiàn)了異步線程的節(jié)點通信功能。在這種通信機制下,節(jié)點可以接收單播和多播請求并做出響應。在管道消息到來之前,每個節(jié)點需要安裝偵聽器來處理來自其他節(jié)點的消息。當消息到達后,節(jié)點對管道報文消息進行解析處理,產(chǎn)生相應的事件,事件會激活偵聽器進行請求響應的處理。節(jié)點A建立輸入管道并實現(xiàn)net.jxta.pipe.PipeMsgListener接口的PipeMsgEvent(PipeMsgEvent event)方法來完成有管道消息輸入時觸發(fā)相關操作。節(jié)點B建立輸出管道并實現(xiàn)net.jxta.pipe.OutPipeListener接口的OutPipeEvent(OutPipeEvent event)方法來完成有管道消息輸出時時觸發(fā)相關操作。
3.文件存儲與獲取
在本部分功能實現(xiàn)中,利用了CMS服務。文件存儲與獲取通過LIST_REQ、LIST_RES、GET_REQ、GET_RES和ASK_DOWNLOAD_REQ等消息來實現(xiàn)。系統(tǒng)啟動后,用戶節(jié)點加入默認的NetPeerGroup。用戶存儲文件時,首先選取要存儲的文件,然后對文件進行編碼,最后將文件分塊發(fā)送到相應節(jié)點上。
下載文件時,用戶選中要下載的文件,將這個文件的ID和本地接收內(nèi)容的輸入管道以及請求ID寫入到請求消息中傳給目標節(jié)點。節(jié)點收到LIST_REQ消息后,會發(fā)出一個LIST_RES的響應消息。用戶收到LIST_RES消息后,如果對其中的某個共享內(nèi)容感興趣,想要從對方節(jié)點下載,會向?qū)Ψ焦?jié)點發(fā)出一個GET_REQ消息,利用LIST_REQ中的輸入管道來請求下載分塊數(shù)據(jù)。節(jié)點收到GET_REQ消息后,首先,檢查自身是否包含GET_REQ消息中的共享內(nèi)容塊,如果包含,則通過GET_REQ消息中指定的輸入管道發(fā)出一個或多個GET_RES響應消息。節(jié)點根據(jù)文件ID獲得文件廣告和相關信息,通過文件路徑信息定位到文件,然后通過創(chuàng)建文件輸入流FilelnputStream(filepath)對象獲得輸入流,每次讀取指定大小的字節(jié)作為一個返回信息傳送給用戶。文件下載通過FilelnputStream讀取文件并將讀到的信息寫入CMS協(xié)議的GET-RES中,然后通過JXTA管道傳輸?shù)奖镜亍?/p>
四、結(jié)束語
JXTA技術(shù)是P2P的新發(fā)展,它提供的通用的平臺和協(xié)議可以高效靈活地開發(fā)P2P應用程序。本文提出了基于Chord協(xié)議,利用JXTA技術(shù)實現(xiàn)的分布式存儲。系統(tǒng)由地理分布的多個節(jié)點構(gòu)成,每個節(jié)點都是擁有存儲空間的獨立計算機,節(jié)點之間以JXTA網(wǎng)絡的方式組織,采用Chord環(huán)路作為網(wǎng)絡的拓撲結(jié)構(gòu),利用CMS來實現(xiàn)文件的存儲與下載。
參考文獻:
[1]田榮華,盧顯良,侯孟書.P2P分布式存儲系統(tǒng)[J].計算機科學,2007,(11):47-48.
[2]趙森.基于DHT的Chord算法研究[J].網(wǎng)絡安全技術(shù)與應用,2007,(11):44-46.
[3]Scott Oaks,Bernard TraversatεLi Gong著.技橋譯.JXTA技術(shù)手冊.北京:清華大學出版社,2004.4.
[4]林川等.基于JXTA的P2P文件共享系統(tǒng)的研究[J].溫州大學學報,2007,(8):35-41.