引言:如今P2P已經(jīng)成為網(wǎng)絡(luò)中不可缺少的應(yīng)用技術(shù),Kademlia網(wǎng)絡(luò)是應(yīng)用最廣泛的基于DHT協(xié)議的P2P網(wǎng)絡(luò)。本文針對(duì)Kademlia網(wǎng)絡(luò)缺點(diǎn)提出了一種帶域結(jié)構(gòu)的Kademlia網(wǎng)絡(luò),并完成了該網(wǎng)絡(luò)的路由表設(shè)計(jì),路由設(shè)計(jì)和資源發(fā)布設(shè)計(jì)等。最后通過(guò)OverSim軟件仿真可知該網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)于Kademlia網(wǎng)絡(luò)。
Kademlia[1]是一種分布式哈希表(DHT)技術(shù)。由于Kademlia網(wǎng)絡(luò)的資源搜索過(guò)程消耗了一些不必要的網(wǎng)絡(luò)路由,減慢了資源查詢速度;同時(shí)該網(wǎng)絡(luò)忽視了網(wǎng)絡(luò)節(jié)點(diǎn)能力的差異,不符合負(fù)載均衡的基本理念,降低整個(gè)網(wǎng)絡(luò)的整體性能。本文針以上缺點(diǎn)提出了一種帶域結(jié)構(gòu)的Kademlia網(wǎng)絡(luò)。
一、帶域結(jié)構(gòu)的Kademlia網(wǎng)絡(luò)
該網(wǎng)絡(luò)模型的主要改進(jìn)及實(shí)現(xiàn)如下。
1.1 主要改進(jìn)
(1)邏輯空間增加物理拓?fù)湫畔?,:采用二層的Kademlia結(jié)構(gòu),將IP地址的32位地址的前16位作為節(jié)點(diǎn)ID的前16位,域內(nèi)ID采用隨機(jī)112位ID,存儲(chǔ)兩張路由表,一個(gè)域路由表,一個(gè)域內(nèi)路由表。
(2)網(wǎng)絡(luò)中區(qū)分節(jié)點(diǎn)的性能:該網(wǎng)絡(luò)中的節(jié)點(diǎn)按照存儲(chǔ)能力、運(yùn)算能力、網(wǎng)絡(luò)能力和穩(wěn)定性來(lái)分類,有利于充分發(fā)揮整個(gè)網(wǎng)絡(luò)的性能。
(3)網(wǎng)絡(luò)中加入集合節(jié)點(diǎn),負(fù)責(zé)離線節(jié)點(diǎn)收集和域信息轉(zhuǎn)發(fā)。集合節(jié)點(diǎn)優(yōu)先采用穩(wěn)定在線的節(jié)點(diǎn)來(lái)承擔(dān),其次根據(jù)節(jié)點(diǎn)性能來(lái)確定,這樣能保證域間路由的穩(wěn)定。
(4)網(wǎng)絡(luò)中加入注冊(cè)節(jié)點(diǎn),給節(jié)點(diǎn)的加入帶來(lái)了便利,給整個(gè)網(wǎng)絡(luò)穩(wěn)定和效率提供了保障,還可以緩存部分路由信息來(lái)加速新節(jié)點(diǎn)的路由初始化。
1.2網(wǎng)絡(luò)節(jié)點(diǎn)結(jié)構(gòu)
1.節(jié)點(diǎn)ID生成
節(jié)點(diǎn)由16位的域ID,112位的節(jié)點(diǎn)ID構(gòu)成,域ID由IP地址生成,節(jié)點(diǎn)ID采用隨機(jī)算法生成。
2.資源ID生成
資源ID采用128位ID,前16位ID由文件內(nèi)容MD5[2]值對(duì)216取模生成,后112位ID根據(jù)文件內(nèi)容MD5生成的。
3.節(jié)點(diǎn)路由表
(1)普通節(jié)點(diǎn)路由表
每個(gè)普通節(jié)點(diǎn)存儲(chǔ)一張域路由表和域內(nèi)路由表。具體內(nèi)容參考Kademlia路由表。
(2)集合節(jié)點(diǎn)路由表
每個(gè)集合節(jié)點(diǎn)也存儲(chǔ)一張域路由表和域內(nèi)路由表。集合節(jié)點(diǎn)是由普通節(jié)點(diǎn)升級(jí)或注冊(cè)生成的,負(fù)責(zé)域間消息轉(zhuǎn)發(fā),離線節(jié)點(diǎn)收集,它不僅保存了域內(nèi)路由表,還保存了所有域ID以及每個(gè)域的集合節(jié)點(diǎn)信息。
(3)注冊(cè)節(jié)點(diǎn)路由表
注冊(cè)節(jié)點(diǎn)負(fù)責(zé)集合節(jié)點(diǎn)的更新和新注冊(cè)節(jié)點(diǎn)的路由更新,該節(jié)點(diǎn)不僅需要保存集合節(jié)點(diǎn)信息,還需要保存一個(gè)域內(nèi)所有節(jié)點(diǎn)的power值列表以便于動(dòng)態(tài)更新集合節(jié)點(diǎn)。
1.3 節(jié)點(diǎn)更新策略
1.3.1 集合節(jié)點(diǎn)的同步與更新
由注冊(cè)節(jié)點(diǎn)動(dòng)態(tài)檢查與更新機(jī)制來(lái)完成集合節(jié)點(diǎn)的更新,更新完成后,發(fā)送消息給所有原來(lái)的在線集合節(jié)點(diǎn),要求他們更新自己路由表中的集合節(jié)點(diǎn)。
1.3.2 路由表動(dòng)態(tài)更新
注冊(cè)節(jié)點(diǎn)周期性的檢查集合節(jié)點(diǎn)的在線狀況,并動(dòng)態(tài)更新域路由表,同時(shí)通知所有集合節(jié)點(diǎn)更新他們的路由表。
1.3.3 數(shù)據(jù)發(fā)布更新
每個(gè)節(jié)點(diǎn)將發(fā)布文件的信息數(shù)據(jù)緩存在自己的P個(gè)最近的域以及每個(gè)域的K個(gè)最近的鄰居處,當(dāng)存放數(shù)據(jù)的節(jié)點(diǎn)失效時(shí),以便數(shù)據(jù)會(huì)很快被更新到其他新節(jié)點(diǎn)上。
1.4資源定位機(jī)制
1.4.1 資源發(fā)布
本網(wǎng)絡(luò)中資源發(fā)布采用
1、節(jié)點(diǎn)A首先取出根據(jù)文件內(nèi)容MD5生成的112
位NodeID,再對(duì)216取模得到AreaID。
2、發(fā)起者首先向注冊(cè)服務(wù)器發(fā)送<查詢域>請(qǐng)求,尋
找最接近AreaID的P個(gè)域。
3、發(fā)起者收到返回的對(duì)應(yīng)最接近的P個(gè)域的集合節(jié)點(diǎn)后,向這P個(gè)集合節(jié)點(diǎn)發(fā)起<加入域> 消息,如果不存在AreaID值最接近的域,則生成該域;發(fā)布節(jié)點(diǎn)成為該域集合節(jié)點(diǎn)。
4、這P個(gè)集合節(jié)點(diǎn)發(fā)起<查找節(jié)點(diǎn)>消息,在該P(yáng)個(gè)域中定位最接近NodeID的每個(gè)域的的K個(gè)節(jié)點(diǎn),然后在這P*K個(gè)節(jié)點(diǎn)上發(fā)起<存儲(chǔ)>操作。
5、執(zhí)行<存儲(chǔ)>操作的P*K個(gè)節(jié)點(diǎn)每小時(shí)重新發(fā)布節(jié)點(diǎn)數(shù)據(jù)對(duì)信息
6、規(guī)定在任何時(shí)候,域中若有w上的NodeID對(duì)數(shù)據(jù)更接近,w將
1.4.2資源定位
資源定位步驟:
1、節(jié)點(diǎn)A首先取出根據(jù)文件內(nèi)容MD5生成的112位NodeID,再將該ID模216取得AreaID。
2、查詢本地域路由表,向本地集合點(diǎn)發(fā)送<查詢節(jié)點(diǎn)>消息,集合節(jié)點(diǎn)返回對(duì)應(yīng)的NodeID位置信息,然后發(fā)送<下載>消息到目標(biāo)節(jié)點(diǎn)完成下載。
3、如果本地域沒(méi)有找到NodeID,則直接向服務(wù)器發(fā)送<查詢域>消息,返回P個(gè)域的集合節(jié)點(diǎn),并向這些集合節(jié)點(diǎn)發(fā)送<查詢節(jié)點(diǎn)>消息。
4、集合節(jié)點(diǎn)根據(jù)文件的NodeID,根據(jù)Kademlia定位算法,負(fù)責(zé)本域內(nèi)的NodeID定位,最終由集合點(diǎn)返回給請(qǐng)求節(jié)點(diǎn)對(duì)應(yīng)的文件位置信息,然后由請(qǐng)求節(jié)點(diǎn)發(fā)送<下載>消息到由集合節(jié)點(diǎn)最先返回的目標(biāo)節(jié)點(diǎn),并和此目標(biāo)節(jié)點(diǎn)聯(lián)系完成下載。
二、系統(tǒng)仿真
仿真實(shí)驗(yàn)?zāi)M了1500個(gè)節(jié)點(diǎn)在1個(gè)小時(shí)內(nèi)Kademlia和帶域結(jié)構(gòu)Kademlia網(wǎng)絡(luò)的仿真測(cè)試,利用OverSim[3]的應(yīng)用程序類模擬了接近真實(shí)網(wǎng)絡(luò)的拓?fù)?,利用網(wǎng)絡(luò)波動(dòng)類模擬節(jié)點(diǎn)的頻繁退出和加入的操作。通過(guò)仿真可知該網(wǎng)絡(luò)充分考慮了節(jié)點(diǎn)間的物理位置信息及網(wǎng)絡(luò)異構(gòu)性,加入了集合節(jié)點(diǎn)與注冊(cè)節(jié)點(diǎn),優(yōu)于傳統(tǒng)的Kademlia網(wǎng)絡(luò)。
參考文獻(xiàn)
[1]Petar Maymounkov and David Maziμeres. Kademlia: A peer-to-peer information system based on the XOR metric. In Proceedings of the 1st International Workshop on Peer-to-Peer Systems (IPTPS'02), pages 53~65, March 2002.
[2]RFC1321,The MD5 Message-Digest Algorithm.
[3]http://www.oversim.org.
(作者單位:南陽(yáng)理工學(xué)院軟件學(xué)院)
作者簡(jiǎn)介:邱雅(1981~),女(漢族),河南南陽(yáng)人,南陽(yáng)理工學(xué)院軟件學(xué)院講師,碩士,主要從事計(jì)算機(jī)相關(guān)教學(xué)研究。