劉 業,劉林峰
(1.中國科學技術大學 蘇州研究院,江蘇 蘇州215123;2.中國科學技術大學 軟件學院,江蘇 蘇州215123;3.南京郵電大學 計算機學院,江蘇 南京210003;4.陽立電子(蘇州)有限公司,江蘇 蘇州215000)
近年來,CAN、Chord、Tapestry、Pastry、BAKE[1-6]等為代表的結構化拓撲P2P網絡技術層出不窮,結構化P2P網絡在資源管理過程中同時擁有自組織特性、規模的強可縮放特性以及部署的廉價性等等,突破了網絡規模限制的結構化P2P網絡技術給廣域網范圍內規模龐大的資源整合及共享提供了可能性。
目前國內P2P網絡研究領域很多都是在某一種開源項目的基礎上來開展后續研究,目前尚未有一個通用的P2P網絡支撐平臺見諸報道。我們通用的結構化P2P網絡支撐平臺原型系統設計的目的是建立一個可以應用于廣域網范圍內,集資源整合與利用為一體,面向服務的P2P網絡支撐平臺,能夠提供文件共享、應用層多播、CPU資源整合、網絡存儲、極速傳輸等基本服務,從而實現對當前網絡中的存儲資源、計算資源、存儲轉發資源(即,帶寬資源)以及信息資源的整合。另外,通用平臺是基于分層模型的,亦能方便我們進行底層不同結構化P2P網絡拓撲及路由算法的替換,利于進行不同結構化P2P網絡路由算法的比對研究。
正文部分首先給出了一種通用的結構化P2P網絡支撐平臺實現框架的模塊劃分圖,接下來介紹了我們所開發的通用平臺的具體設計及實現,闡述了課提供給第三方進行新型應用開發的開放接口函數,最后給出了通用平臺的相關測試結果。
參照文獻[7]給出的面向服務的P2P網絡體系結構(ISPNA)框架模型,圖1給出了一種典型的結構化P2P網絡支撐平臺參考模型。得益于結構化P2P網絡技術所擁有的強大的可縮放特性,我們能夠在該結構化P2P網絡支撐平臺參考模型的指導下,實現一個在廣域網范圍內進行海量規模的資源整合及共享的系統。

圖1 結構化P2P網絡支撐平臺參考模型
圖2給出了一個原型系統的總體實現框架,我們接下來對各主要功能模塊的實現做逐一說明。對于P2P網絡中的某一節點Node i來說,在功能上該節點既是Client端,亦是Server端。
(1)P2P路由模塊:利用現有的(TCP、UDP、HTTP)通信協議建立P2P路由通道,完成冪次逼近的路由過程,向上層模塊提供可調用的P2PAPI接口函數;
(2)路由表維護模塊:維護P2P節點間的邏輯鄰居關系,即節點路由表的更新操作,適應P2P網絡節點在自組織管理模式下的動態(加入、退出)行為;

圖2 總體實現框架模塊劃分
(3)共享資源管理模塊:資源在該層以resource_object的形式抽象,該模塊負責P2P節點之上所維護的資源穩定性的管理操作,包括節點動態加入、退出時,該節點所維護的resource_object的重新分配過程,等;
(4)Server端圖形界面模塊:Chord Ring Visualizer,用于查看P2P網絡環中每個節點狀態的工具,它能夠檢測當前環中的節點數、每個節點的前驅,后繼列表,finger節點等等??捎^察到節點的加入退出,鄰居節點調整的過程。
(1)可用性增強擴展模塊:結構化P2P網絡路由效率的提高是增強P2P網絡可用性,推動其進一步發展的關鍵所在。
(2)安全性增強模塊:端節點的自私行為勢必導致P2P網絡資源的可用性存在極大的變數,在自組織管理模式下的P2P網絡中,正因為諸如此類的節點自私行為是大量存在的,因此需要研究相應的機制來約束節點的自私行為,從而增強整個P2P網絡的可用性及穩定性。
(1)文件共享服務模塊:整合聯入系統的節點的文件資源,提供文件資源共享服務,實現資源的查詢及下載服務;
(2)計算力資源整合模塊:整合聯入系統的節點的CPU資源,完成特定領域的科學計算過程,適合于輸入集松耦合、不同節點所使用算法大致相同或者獨立的科學計算過程,應用實例舉例——特大質數的判別;
(3)網絡存儲服務模塊:整合聯入系統的節點的存儲資源,提供海量數據存儲服務,應用實例舉例——網絡硬盤的實現;
(4)極速傳輸服務模塊:整合聯入系統的節點的帶寬資源,提供高速的數據傳輸服務。其工作原理如下,采用文件分片傳輸的方法進行文件傳輸,發送方借助P2P網絡鄰居節點的帶寬,使多個節點同時向接收方發送文件,從而乘數級增加數據傳輸時的帶寬。應用實例舉例——極速傳輸工具。
P2P路由模塊及路由表維護模塊(JavaChord模塊)是完全自主地利用Java開發的一個P2P路由模塊,同時參考文獻[8]所提及的15個open問題,對算法作了必要的修改和補充。主要工作包括P2P路由報文的設計及約定。JavaChord模塊使用JavaRMI[9]實現,主要包括sigp2p.chord.datatypes,sigp2p.chord.protocol,sigp2p.chord.protocol.rmi這3個包,每個包的詳細說明略。其中在rmi包中使用了RMICache機制,即Cache將最近訪問過的RMI服務保存在列表中,如果程序馬上訪問,可以直接從列表中得到。目的就是為了提高P2P資源查找效率而設的。
本部分主要介紹通用平臺的用戶界面Server部分的控制界面,如圖3所示。

圖3 通用平臺用戶界面:Server端控制界面
下面分區域介紹Server部分的控制界面的功能:
(1)本地節點信息區:這一部分設置本節點的IP地址,基本端口號和虛擬節點號。本機IP地址可以點擊Refresh按鈕獲得,端口號和虛擬節點號可以自行設定,也可以點擊 “Randomly select port and vid”隨機選取。
(2)啟動模式控制區:控制啟動模式。選中 “Start bootstrap mode”將本機作為啟動節點(即環中第一個節點)。點擊Join now可以加入環中已存在的節點。如果沒有選中將本機作為啟動節點的模式,啟動節點后將自動執行Join操作。
(3)節點控制區:控制節點。包括啟動,關閉,參數設置,顯示finger表,退出程序等。
(4)應用層服務控制區:控制應用服務器。程序啟動后,下拉列表框中會出現所有已安裝的應用插件。port是報告給應用程序的端口號,不是基本端口號。
(5)日志區:顯示程序日志。
(6)性能計數器區:顯示程序的性能計數器。
P2P通用平臺以開放API函數的形式提供給第三方進行新型應用的開發。接口函數說明如下:
(1)接口:服務器端應用程序以插件的形式加入到SPIS中。所有服務器端應用程序都要實現ApplicationServer接口,該接口在sigp2p.spis.appserver包中定義。共有如下3個方法:
·voidstartup(finalChordServercs,intport);
該方法用于啟動應用層服務,由SPIS Server調用。參數cs是對當前Chord服務器的引用,參數port為SPIS Server報告給應用層服務的端口,此端口的含義由應用層服務器自行約定,也可以忽略它。
·voidshutdown();
該方法用于關閉應用層服務,由SPIS Server調用。SPIS不保證調用此方法時應用層服務器正在運行。因此,應用層服務器應自行維護自身狀態。
·StringgetAppName();
該方法用于獲取應用層服務的名稱,由SPIS Server調用。
(2)處理Chord結點:每一個Chord結點由IP地址,基本端口號,虛擬結點號組成。Chord基本端口指的是SPIS服務器向客戶端或其它服務器報告SPIS結點時采用IP地址加Chord基本端口的方式。如果應用層服務自身協議沒有約定端口,則必須在Chord基本端口上進行監聽,以接受服務請求。Chord結點用ChordNode類來表示,該類中對應用層服務開發有幫助的成員函數介紹(略)。
(3)Chord Server API:一般情況下,對于應用層服務開發而言,不會用到join,SetParams,startup,shutdown這4個方法。因此,這里只介紹其余的5個方法。
·publicabstractChordNodegetSucessor();
獲取當前結點的后繼,在環未穩定的情況下,后繼可能沒有找到,此時返回null。
·publicabstractChordNodegetPredecessor();
獲取當前結點的前驅,在環未穩定的情況下,前驅可能沒有找到,此時返回null。
·publicabstractChordNodegetFinger(intindex);
獲取當前結點的finger,參數index是finger本身,可取的范圍是0<=index<=159。finger 0即結點本身。
·publicabstractbooleanisRunning();
判斷Chord服務器是否在正運行。若正在運行,返回true,否則返回false。
·publicabstractChordNodegetNode();
獲取當前結點。
一個客戶端可以用ChordClient抽象類來表示,Chord-Client提供基本服務有兩項,一是向結點查找,二是向環發送UDP數據報。
(1)創建和初始化Chord客戶端:為了使用Chord客戶端提供的服務,首先需要創建ChordClient對象。可以通過調用ChordClientFactory工廠類的靜態工廠方法產生,ChordClient創建后,對環一無所知。需要使用addNode將環中的一個結點告訴ChordClient。通過多次調用addNode加入更多的結點。
(2)結點查找API:
·publicabstractFindResultlookup(ChordIdkey,int retryCount,intretryInterval,booleanstickToNode);
根據提供的key查找結點,retryCount為重試次數,retryInterval為兩次重試間隔的毫秒數,stickToNode指明是否只通過列表中的第一個結點開始查找。如果stickTo-Node為false,每次重試將依次使用列表中的下一次結點啟動查找。retryCount,retryInterval,stickToNode參數的含義在所有的ChordClient API中都相同。
·publicabstractFindResultlookup(byte[]bytes,intretryCount,intretryInterval,boolean
根據提供的字節數組查找結點。ChordClient將自動在字節數組上施加SHA-1散列算法,以生成160bit的key。
(3)向Chord環發送UDP數據報:ChordClient客戶端提供的第二項基本服務是向環發送UDP數據報。Chord Client首先根據key找到Chord環中的結點,然后向該結點發送UDP數據報。
·publicabstractvoidsendUDP(byte[]msg,intretryCount,intretryInterval,booleanstickToNode);
字節數組為要發送的UDP數據報,ChordClient自動在其上施加SHA-1算法以生成160bit的key。該方法是不阻塞的,如果發送失敗了,客戶將得不到任何提示。
·publicabstractbooleanblockSendUDP(byte[]msg,intretryCount,intretryInterval,booleanstickTo-Node);
這個方法是sendUDP的阻塞版本。如果成功,返回true,否則返回false。這里的成功僅表示結點已被找到,UDP數據報已發送。并不保證數據報被正確接收。
公共工具集是為在通用平臺的開發、調試過程中,所構建的公共工具集。
Chord Ring Visualizer(圖4)是一個用于查看Chord環中每個節點狀態的工具,它能夠檢測當前環中的節點數、每個節點的前驅,后繼列表,finger節點等等??捎^察到節點的加入退出,鄰居節點調整的過程。
Benchmark Chord(圖5)是用于測試Chord環性能的工具,可用于測試Chord環的平均查找時間,查找跳數等參數。


網絡測試環境如圖6所示。 主機 172.18.7.7~172.18.7.10通過交換機連接成局域網絡。我們利用公共工具集完成了通用平臺的功能測試,包括節點的加入、退出過程中P2P網絡的穩定性測試等。

圖6 CHORD測試硬件環境
在4臺PC上分別運行10個節點。同時使用Benchmark Chord記錄每秒完成的查找的數量。由于底層網絡及節點處于動態變化中,瞬間值波動比較大。為了消除瞬間波動帶來的誤差,圖中每個數據點代表該點前60s內平均每秒完成的查找數量。在開啟RMI Cache和關閉RMI Cache兩種情況下,分別做上述實驗,得到如圖7所示結果。使用RMI Cache后,查找的速度提高了30%左右,性能得到了很大的改善。在節點數量進一步增加的情況下,節省的TCP連接數更多,性能還可進一步提高。

圖7 開啟RMI Cache和關閉RMI Cache通用平臺查找資源次數對比
本文提出了一種結構化P2P網絡支撐平臺參考模型,并在該參考模型的指導下,設計開發出一種通用的結構化P2P網絡支撐平臺,并詳細介紹了通用平臺的具體設計及實現,詳細闡述了可提供給第三方進行新型應用開發的API函數,同時給出了通用平臺的相關測試結果。同非結構化P2P網絡相比較,結構化P2P網絡技術所擁有的強大的可縮放特性,為在廣域網范圍內實現海量規模的資源整合及共享提供了可能性,由于我們在通用平臺中提供了ApplicationServer接口,很容易利用插件開發的形式完成應用層服務的開發。本論文的工作對于促進基于結構化P2P網絡的新型應用的開發和推廣有著廣泛的應用前景的。
[1]Chen Zhijia,Zhao Yang.P2Paccelerated mass data distribution over booming internet:Effectiveness and bottlenecks[C]//Montreal,Québec,Canada:Proceedings of the 29th IEEE International Conference on Distributed Computing Systems Workshops,2009:239-244.
[2]Xiong Naixue,Liu Yuhua,Wu Shishun.An efficient search algorithm without memory for Peer-to-Peer cloud computing networks[C]//Anchorage,Alaska,USA:Proceedings of the IEEE International Symposium on Parallel and Distributed Processing Workshops and PhD Forum,2011:1452-1457.
[3]Mohsen Sharifi,Seyedeh Leili Mirtaheri.A dynamic framework for integrated management of all types of resources in P2P systems[J].The Journal of Supercomputing,2010,52(2):149-170.
[4]Pierre Fraigniaud,Philippe Gauron.D2B:A de Bruijn based content-addressable network[J].Theoretical Computer Science,2006,355(1):65-79.
[5]Maenpaa J,Camarillo G.Study on maintenance operations in a chord-based Peer-to-Peer session initiation protocol overlay network[C]//Rome,Italy:Parallel & Distributed Processing,2009:1-9.
[6]Guo D,Liu Y,Ki X.Bake:A balanced Kautz tree structure for peer-to-peer networks[C]//Phoenix,AZ,USA:Proc 27th IEEE INFOCOM,2008.
[7]LIU Ye,LIU Linfeng,ZHUANG Yanyan.An interactive service-oriented P2Pnetworks architecture reference model[J].Engineering Sciences,2007(9):72-77(in Chinese).[劉業,劉林峰,莊艷艷.面向服務的P2P網絡體系結構層次參考模型的研究[J].中國工程科學,2007(9):72-77.]
[8]Joseph D,John D Kubiatowicz.Routing algorithms for DHTs:Some open questions[C]//Cambridge,MA,USA:Electronic Proceedings for the 1st International Workshop on Peerto-Peer Systems,MIT Faculty Club,2002.
[9]JavaRMI[CP/OL].http://docs.oracle.com/javase/6/docs/technotes/guides/rmi.Jan 2012.