国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于JXTA的分布式存儲(chǔ)系統(tǒng)的設(shè)計(jì)

2009-06-17 03:00馬黎艷
中國校外教育(下旬) 2009年6期

馬黎艷

[摘要] 使用基于JXTA平臺(tái)的P2P分布式體系結(jié)構(gòu),采用Chord環(huán)路作為網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),節(jié)點(diǎn)ID和文件ID的生成則通過使用某種HASH算法如MD5,SHA等,設(shè)計(jì)了一個(gè)高可擴(kuò)展、高可靠、高性能的分布式存儲(chǔ)系統(tǒng)。

[關(guān)鍵詞] P2P Chord JXTA 分布式存儲(chǔ)系統(tǒng)

一、引言

由于計(jì)算機(jī)通信技術(shù)的高速發(fā)展,網(wǎng)絡(luò)上的信息資源越來越多,訪問量也越來越大,基于傳統(tǒng)的集中式存儲(chǔ)方式已經(jīng)不能滿足用戶的需要。隨著P2P技術(shù)的發(fā)展,基于P2P的分布式存儲(chǔ)系統(tǒng)也相應(yīng)地得到了快速發(fā)展。目前,已經(jīng)有很多比較成熟的P2P分布式文件存儲(chǔ)系統(tǒng),其中最典型的有:Napster、OceanStore、Past、Chord等文件存儲(chǔ)系統(tǒng)。這些系統(tǒng)的基本思想是將數(shù)據(jù)存儲(chǔ)、訪問與固定的位置分離開來,通過P2P網(wǎng)絡(luò)將Internet上零散的計(jì)算機(jī)連接起來,整合這些計(jì)算機(jī)上的空閑存儲(chǔ)資源,構(gòu)建出一個(gè)高可擴(kuò)展、高可靠、高性能的分布式存儲(chǔ)系統(tǒng)。

二、相關(guān)技術(shù)

1.Chord簡(jiǎn)介

Chord在2001年由麻省理工學(xué)院提出,其核心思想就是要解決如何在P2P網(wǎng)絡(luò)中找到存有特定數(shù)據(jù)的節(jié)點(diǎn)。Chord協(xié)議中其規(guī)定使用的散列算法為SHA-1,并在此基礎(chǔ)上提供了優(yōu)化的路由算法。

在Chord中,每個(gè)節(jié)點(diǎn)需要存儲(chǔ)m個(gè)其他節(jié)點(diǎn)的信息,這些信息的集合被稱為查詢表。表格中的節(jié)點(diǎn)不是直接相鄰的節(jié)點(diǎn),它們的間距(ID間隔)將成2k的關(guān)系排列(k表示表中的數(shù)組下標(biāo))。這樣形成的節(jié)點(diǎn)之間路由關(guān)系實(shí)際上就是折半查找算法需要的排列關(guān)系。在查詢的過程中,查詢節(jié)點(diǎn)將請(qǐng)求發(fā)送到與鍵值最接近的節(jié)點(diǎn)上。收到查詢請(qǐng)求的節(jié)點(diǎn)如果發(fā)現(xiàn)自身存儲(chǔ)了被查詢的信息,可以直接回應(yīng)查詢節(jié)點(diǎn);如果被查詢的信息不在本地,就根據(jù)查詢表將請(qǐng)求轉(zhuǎn)發(fā)到與鍵值最接近的節(jié)點(diǎn)上。這樣的過程一直持續(xù)到找到相應(yīng)的節(jié)點(diǎn)為止,查詢過程實(shí)際上就是折半查找的過程。

2.JXTA簡(jiǎn)介

JXTA是Sun微系統(tǒng)對(duì)等網(wǎng)絡(luò)的標(biāo)準(zhǔn),以它來促進(jìn)和探究分布式計(jì)算的新方法。JXTA具體來說是一種標(biāo)準(zhǔn)組件平臺(tái),它提供了用于開發(fā)分布式服務(wù)和應(yīng)用程序的基本組件。整套技術(shù)由一組開放源碼的P2P協(xié)議組成,這組協(xié)議使網(wǎng)絡(luò)上任何連接著的計(jì)算設(shè)備的協(xié)作變?yōu)榭赡堋J褂眠@些協(xié)議,節(jié)點(diǎn)可以互相合作來建立自我組織、自我管理的對(duì)等組,而不必關(guān)心它們?cè)诰W(wǎng)絡(luò)中所處的位置(在網(wǎng)絡(luò)邊緣或者防火墻的后面),并且也不需要集中的管理機(jī)構(gòu)。

JXTA體系結(jié)構(gòu)由三層組成。應(yīng)用層(Applications)包括了應(yīng)用JXTA服務(wù)開發(fā)出來的完整的P2P應(yīng)用程序。比如,P2P及時(shí)消息、文件和資源共享、P2P電子郵件系統(tǒng)、分布式存儲(chǔ)系統(tǒng)等。服務(wù)層(Services)包含一些網(wǎng)絡(luò)服務(wù),提供了P2P網(wǎng)絡(luò)通用的功能,如查找、共享等機(jī)制、協(xié)議轉(zhuǎn)換等。核心層(JXTA Core)封裝了P2P網(wǎng)絡(luò)最基本的要素,包含了服務(wù)所需要的核心功能,包括對(duì)等體、對(duì)等組、對(duì)等體發(fā)現(xiàn)和相關(guān)的安全原語。

三、系統(tǒng)設(shè)計(jì)

系統(tǒng)采用JXTA平臺(tái)進(jìn)行P2P的設(shè)計(jì)開發(fā),以Chord環(huán)路作為網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),節(jié)點(diǎn)ID和文件ID的生成則通過使用某種HASH算法如MD5,SHA等,文件的存儲(chǔ)與下載則使用CMS來管理。

1.節(jié)點(diǎn)加入與離開

Jxta為發(fā)現(xiàn)對(duì)等節(jié)點(diǎn)、對(duì)等組和其他信息提供了一個(gè)異步機(jī)制,所發(fā)布的關(guān)于對(duì)等節(jié)點(diǎn)或?qū)Φ冉M的信息被稱為通告,節(jié)點(diǎn)正是通過搜尋相應(yīng)的通告來發(fā)現(xiàn)它所需要的資源。當(dāng)節(jié)點(diǎn)X希望加入JXTA網(wǎng)絡(luò)時(shí),首先,查找某個(gè)對(duì)等組內(nèi)的通告,發(fā)送加入請(qǐng)求,組內(nèi)其他節(jié)點(diǎn)收到該請(qǐng)求后做出響應(yīng)。節(jié)點(diǎn)與第一個(gè)發(fā)出響應(yīng)的節(jié)點(diǎn)Y通話,以便初始話本地節(jié)點(diǎn)查詢表(finger table)、跟新其他節(jié)點(diǎn)查詢表及轉(zhuǎn)移關(guān)鍵字信息。

新節(jié)點(diǎn)X以x+2i-1 (l≤i≤m)為消息key值向Y發(fā)出請(qǐng)求,查找消息的Successor節(jié)點(diǎn)和查詢表(finger table)項(xiàng),以此填充自己的查詢表(finger table)項(xiàng)。當(dāng)新節(jié)點(diǎn)完成了自己的路由信息組建之后,通知其他相關(guān)節(jié)點(diǎn)自己的加入,以逆時(shí)針的方向遞歸地通知相關(guān)節(jié)點(diǎn)更新自己的路由信息。最后,其他節(jié)點(diǎn)將所有鍵值歸屬于X的關(guān)鍵字(即后繼節(jié)點(diǎn)是X的關(guān)鍵字)轉(zhuǎn)移到節(jié)點(diǎn)X上。當(dāng)節(jié)點(diǎn)加入時(shí)首先通過哈希函數(shù)產(chǎn)生節(jié)點(diǎn)ID,然后找到ID 相鄰的兩個(gè)節(jié)點(diǎn)作為此節(jié)點(diǎn)的前驅(qū)和后繼節(jié)點(diǎn),系統(tǒng)中每個(gè)節(jié)點(diǎn)都保留其鄰近的前驅(qū)和后繼節(jié)點(diǎn)信息。當(dāng)節(jié)點(diǎn)退出時(shí),此節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)需將其后繼更新為退出節(jié)點(diǎn)的后繼節(jié)點(diǎn)。

2.系統(tǒng)通信

系統(tǒng)采用Java事件處理機(jī)制和Jxta自身的管道通信機(jī)制,實(shí)現(xiàn)了異步線程的節(jié)點(diǎn)通信功能。在這種通信機(jī)制下,節(jié)點(diǎn)可以接收單播和多播請(qǐng)求并做出響應(yīng)。在管道消息到來之前,每個(gè)節(jié)點(diǎn)需要安裝偵聽器來處理來自其他節(jié)點(diǎn)的消息。當(dāng)消息到達(dá)后,節(jié)點(diǎn)對(duì)管道報(bào)文消息進(jìn)行解析處理,產(chǎn)生相應(yīng)的事件,事件會(huì)激活偵聽器進(jìn)行請(qǐng)求響應(yīng)的處理。節(jié)點(diǎn)A建立輸入管道并實(shí)現(xiàn)net.jxta.pipe.PipeMsgListener接口的PipeMsgEvent(PipeMsgEvent event)方法來完成有管道消息輸入時(shí)觸發(fā)相關(guān)操作。節(jié)點(diǎn)B建立輸出管道并實(shí)現(xiàn)net.jxta.pipe.OutPipeListener接口的OutPipeEvent(OutPipeEvent event)方法來完成有管道消息輸出時(shí)時(shí)觸發(fā)相關(guān)操作。

3.文件存儲(chǔ)與獲取

在本部分功能實(shí)現(xiàn)中,利用了CMS服務(wù)。文件存儲(chǔ)與獲取通過LIST_REQ、LIST_RES、GET_REQ、GET_RES和ASK_DOWNLOAD_REQ等消息來實(shí)現(xiàn)。系統(tǒng)啟動(dòng)后,用戶節(jié)點(diǎn)加入默認(rèn)的NetPeerGroup。用戶存儲(chǔ)文件時(shí),首先選取要存儲(chǔ)的文件,然后對(duì)文件進(jìn)行編碼,最后將文件分塊發(fā)送到相應(yīng)節(jié)點(diǎn)上。

下載文件時(shí),用戶選中要下載的文件,將這個(gè)文件的ID和本地接收內(nèi)容的輸入管道以及請(qǐng)求ID寫入到請(qǐng)求消息中傳給目標(biāo)節(jié)點(diǎn)。節(jié)點(diǎn)收到LIST_REQ消息后,會(huì)發(fā)出一個(gè)LIST_RES的響應(yīng)消息。用戶收到LIST_RES消息后,如果對(duì)其中的某個(gè)共享內(nèi)容感興趣,想要從對(duì)方節(jié)點(diǎn)下載,會(huì)向?qū)Ψ焦?jié)點(diǎn)發(fā)出一個(gè)GET_REQ消息,利用LIST_REQ中的輸入管道來請(qǐng)求下載分塊數(shù)據(jù)。節(jié)點(diǎn)收到GET_REQ消息后,首先,檢查自身是否包含GET_REQ消息中的共享內(nèi)容塊,如果包含,則通過GET_REQ消息中指定的輸入管道發(fā)出一個(gè)或多個(gè)GET_RES響應(yīng)消息。節(jié)點(diǎn)根據(jù)文件ID獲得文件廣告和相關(guān)信息,通過文件路徑信息定位到文件,然后通過創(chuàng)建文件輸入流FilelnputStream(filepath)對(duì)象獲得輸入流,每次讀取指定大小的字節(jié)作為一個(gè)返回信息傳送給用戶。文件下載通過FilelnputStream讀取文件并將讀到的信息寫入CMS協(xié)議的GET-RES中,然后通過JXTA管道傳輸?shù)奖镜亍?/p>

四、結(jié)束語

JXTA技術(shù)是P2P的新發(fā)展,它提供的通用的平臺(tái)和協(xié)議可以高效靈活地開發(fā)P2P應(yīng)用程序。本文提出了基于Chord協(xié)議,利用JXTA技術(shù)實(shí)現(xiàn)的分布式存儲(chǔ)。系統(tǒng)由地理分布的多個(gè)節(jié)點(diǎn)構(gòu)成,每個(gè)節(jié)點(diǎn)都是擁有存儲(chǔ)空間的獨(dú)立計(jì)算機(jī),節(jié)點(diǎn)之間以JXTA網(wǎng)絡(luò)的方式組織,采用Chord環(huán)路作為網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),利用CMS來實(shí)現(xiàn)文件的存儲(chǔ)與下載。

參考文獻(xiàn):

[1]田榮華,盧顯良,侯孟書.P2P分布式存儲(chǔ)系統(tǒng)[J].計(jì)算機(jī)科學(xué),2007,(11):47-48.

[2]趙森.基于DHT的Chord算法研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2007,(11):44-46.

[3]Scott Oaks,Bernard TraversatεLi Gong著.技橋譯.JXTA技術(shù)手冊(cè).北京:清華大學(xué)出版社,2004.4.

[4]林川等.基于JXTA的P2P文件共享系統(tǒng)的研究[J].溫州大學(xué)學(xué)報(bào),2007,(8):35-41.