葛君偉,王燕峰,方義秋
(重慶郵電大學 計算機科學與技術學院,重慶400065)
“云計算”作為一種新興的分布式計算模式,目前正受到人們的普遍關注。但是由于其相關技術還不成熟,人們對于云安全的種種焦慮以及不想 “云”被少數(shù)巨頭控制等因素成為云計算發(fā)展的瓶頸。因此,古老的P2P技術在這樣的新技術階段就顯現(xiàn)了它獨特的優(yōu)勢,可以為云計算的發(fā)展顯現(xiàn)出一份新的活力。
云計算和P2P技術應用的有效結合是未來發(fā)展的趨勢,而相應網絡的資源搜索是其研究的核心問題[1]。
目前研究的P2P網絡主要可以分為三類:①集中式的P2P網絡,例如Napster;②非結構化P2P網絡,例如Gnutella[2]。這兩種方案在設計初期并沒有考慮運行在大規(guī)模網絡環(huán)境下,可擴展性差;③結構化P2P網絡,典型的算法有Chord,CAN,Pastry和Tapestry,它的優(yōu)點是具有良好的可擴展性、魯棒性以及查找的準確性,相比①、②兩種網絡結構,結構化的P2P網絡更適用于云計算。
在結構化P2P網絡資源搜索算法中,Chord算法是一種以去中心化的方式實現(xiàn)分布式計算應用中數(shù)據(jù)項查詢定位,該算法正符合本文在云計算中引進P2P網絡技術的初衷,因此也就成為基于云計算的P2P資源搜索算法的首選。然而Chord算法沒有考慮到節(jié)點異構性和路由表冗余的問題,而這些問題大都和網絡的拓撲結構以及路由表的結構密切相關[3],因此,為了有效的提高資源搜索效率,本文提出一個有效的網絡拓撲模型,并改進路由表結構。
Chord是由MIT實驗室等人在2001年提出的一種結構化的P2P模型,它主要解決了根據(jù)查詢消息的內容定位目標資源所在的具體位置這個問題。
在Chord環(huán)中的每個節(jié)點有一個指向前驅結點指針,指向后繼結點的指針以及一張路由表,在節(jié)點n的路由表中,它的第j(1≤j≤m)項保存Chord環(huán)上順時針距當前節(jié)點距離為2j-1的第一個節(jié)點,用finger[j].start=n+2j-1(mod2m,1≤j≤m)來表示[4]。
圖1給出了N8的finger表和查找k為53的過程,以N8為例,它的finger表的第一項后繼結點是successor(n+20)=N14,第二項則是successor(n+21)=N14,依此類推得出直到第六項。對于Chord環(huán)上的任意節(jié)點n,查找數(shù)據(jù)對象k時,首先檢查k是否存在于自身,如果是,則直接回應查找節(jié)點;否則,要檢查k是否落在n和successor(n)之間,如果是,則把它的后繼節(jié)點返回給查找節(jié)點;否則,節(jié)點要按照finger表來進行路由,從finger表最后一項向前比較,如果finger表中第j項的后繼節(jié)點落在n和k之間,則把查找請求轉發(fā)給指針表第j項的后繼結點,通過遞歸這個過程,最終定位到k的后繼節(jié)點[5]。
圖1 Chord算法路由
關于Chord算法,它也存在一些不足之處,例如:它忽略了節(jié)點的異構性和路由表冗余過大等問題,當網絡規(guī)模較大時,這些問題將嚴重制約著網絡中資源搜索的性能。
(1)節(jié)點異構方面
對于Chord系統(tǒng),目前大多數(shù)研究都認為每個節(jié)點都是完全平等的,沒有考慮到網絡中各個節(jié)點之間的異構性,而實際P2P網絡中的各個節(jié)點都存在著差異,如果忽略這些差異,Chord系統(tǒng)在具體的使用中將存在許多困難[6]。
(2)路由表冗余方面
從圖1的Chord環(huán)可以看出,標識符空間為26=64,上線節(jié)點的個數(shù)為10,以節(jié)點N8為開始,2i為跨度來尋找路由表中的后繼結點,分別以20、21、22為跨度,找到的后繼節(jié)點都是N14,也就是有接近一半的路由信息是冗余信息。
以上例子是以m=6的情況來做的分析,一般情況下m取值為128,形成2128的環(huán)形空間,假定網絡中有節(jié)點264個節(jié)點 (實際中節(jié)點數(shù)遠比這要少),采用SHA-1來為節(jié)點分配關鍵字,可以近似的認為節(jié)點在環(huán)上是均勻分布的,則每兩個節(jié)點之間的間隔是2128/264=264,每一個節(jié)點的路由表項有m=128項路由信息。由于一個節(jié)點的路由表相鄰的兩個指針表項標識符 (n+2i-1mod2m)是以2的倍數(shù)遞增的,所以大概也有64/128=50%的信息是冗余的,這些一則造成存儲空間的浪費,另則造成路由信息不能大范圍的對Chord環(huán)進行覆蓋,從而影響了路由的查詢效率[7]。
我們從宏觀的角度來看待云計算網絡,由于云計算網絡是由很多個云服務器連在一起構成的,我們把一個云服務器當做網絡中的一個節(jié)點,稱為云節(jié)點,作為構成網絡拓撲結構的基本元素。云節(jié)點在處理數(shù)據(jù)的能力、存儲空間、上線時間以及帶寬等方面存在著差異性[8]。
由于原始的Chord算法沒有考慮到節(jié)點異構性的問題,單一的引用Chord并不適用,所以必須在此基礎上進行改進。
具體的思想是:首先對網絡中各個云節(jié)點的IP地址進行研究,把具有相同網絡號的云節(jié)點歸為一組,構成Chord從環(huán)。然后在每一個組中,對各個云節(jié)點的性能進行評估比較,根據(jù)其評估比較的結果,選擇性能最好的云節(jié)點作為超級云節(jié)點,和其他組中的超級云節(jié)點按照Chord算法組成Chord主環(huán)[9];選擇性能僅次于超級云節(jié)點的節(jié)點作為后備云節(jié)點[10],在本組超級云節(jié)點失效或者離開網絡時,接替其工作,充當新的超級云節(jié)點。
為了后面便于描述,我們在此定義該建立的模型為MC-Chord,具體的模型結構如圖2所示。
圖2 MC-Chord模型
在本模型中,首先超級云節(jié)點是該所屬的Chord從環(huán)的一份子,所以需要一個從環(huán)finger表來表示在該從環(huán)中各個云節(jié)點之間的關系,同時,超級云節(jié)點也是Chord主環(huán)的一部分,所以還需要一個主環(huán)finger表來表示主環(huán)上各個超級云節(jié)點之間的關系。對于普通云節(jié)點來說,只需要一個從環(huán)finger來表示所在從環(huán)上各個云節(jié)點之間的關系。考慮到后備云節(jié)點的特殊性,除了要有一個表示從環(huán)云節(jié)點之間關系的從環(huán)finger表之外,還必須有一個和本組超級云節(jié)點完全一樣的主環(huán)finger表。
對于以上每一個finger表,為了提高其路由效率,本文在MC-Chord的基礎上,對節(jié)點的finger表計算公式進行修改,修改后的模型稱為 MFC-Chord。首先對i進行分步考慮,并向公式引進一個參數(shù)d,d表示當前云節(jié)點和后繼云節(jié)點之間的距離。由于一致性散列函數(shù)能夠使所有的物理節(jié)點大致均勻的分布在Chord環(huán)上,所以任意云節(jié)點和它的后繼云節(jié)點的距離大致都相等。
改進的計算公式如下
據(jù)統(tǒng)計分析,在云節(jié)點的原始finger表構造公式中,云節(jié)點finger表在 [1,]范圍內的指針項的后繼指針指向都是重復的,因此通過式 (1)中的第一項表達式,消除了finger表的重復部分,只保留了一項;當i在 (,m]的范圍內時,finger表項是跟原始的Chord的finger表算法一致。
以圖1所示的Chord環(huán)為例,表1是以云節(jié)點的原始finger表計算公式得出的N1的finger表結構。表2則是以式 (1)計算出的N1的finger表結構,其中路由finger表公式中的參數(shù)d=6。對比表1和表2可知,改進后N1的finger表沒有冗余信息。
考慮到式 (1)得出的finger表只覆蓋了半個Chord環(huán)上的云節(jié)點,為了使finger表能夠大范圍的覆蓋Chord環(huán),對這公式再進行修改,得到的公式為
由式 (5)得出N1的finger表結構如表3所示。
表1 原Chord的N1的finger表
表2 式 (1)得出的N1的finger表
表3 式 (2)得出的N1的finger表
對比表2和表3,式 (2)計算出的N1的finger表的覆蓋范圍更為廣泛,而且沒有出現(xiàn)新的冗余信息。
由于原始的finger表計算公式得出的云節(jié)點finger表存在著冗余信息,利用式 (1)消除了相應的冗余信息,但finger表的長度也隨之縮短了,從而使得finger表空間未能被充分利用,由表2可以看出;式 (2)是在式 (1)的基礎上進行改進,改進的效果是使得finger表的覆蓋范圍得到了一定程度的擴展,但finger表的空間利用率并沒有得到提高,由表3可以看出。基于此,需要在式 (2)基礎上再作進一步改進。
據(jù)統(tǒng)計分析,由式 (2)得出的finger表覆蓋范圍約為3/4個Chord環(huán),則還有1/4個Chord環(huán)還沒有覆蓋,因此消除冗余信息之后,采取從 (2m-2m-2,2m)的范圍中選取云節(jié)點添加到路由表尾部。為了保證路由表的空間能夠被充分利用,選取云節(jié)點的數(shù)目就等于刪除的冗余信息數(shù);假設刪除的冗余信息數(shù)為N,為了能夠保證選取的云節(jié)點分布均勻,且保證選取的最后一個云節(jié)點不為起始云節(jié)點,則把 (2m-2m-2,2m-d)這個范圍平均分成N份,然后從每份中選取一個云節(jié)點添加到finger表中。得到的公式如下
假設Chord環(huán)上的云節(jié)點都是均勻分布的,一般情況下,1/4個Chord環(huán)所覆蓋的云節(jié)點數(shù)遠大于刪除的冗余信息數(shù),所以在 (2m-2m-2,2m-d)范圍內被平均分成N份后,每一份范圍中所包含的云節(jié)點數(shù)必定不小于1,因此在每一份范圍中選取云節(jié)點添加到finger尾部后,finger表并不會出現(xiàn)新的冗余信息。
由式 (3)得出N1的finger表結構如表4所示。
表4 式 (3)得出的N1的finger表
對比表3和表4,式 (3)得出的結果一方面使得云節(jié)點的finger表覆蓋范圍又進一步擴展了,另一方面解決了finger表空間未能充分利用的問題,并且沒有出現(xiàn)新的冗余信息,從而提高資源查找的效率。
首先在從環(huán)內進行查找,如能查找到所需資源,則查找結束;否則,再進行環(huán)間查找,直到找到相應資源為止,主要步驟如下:
(1)云節(jié)點發(fā)起查詢,首先在本云節(jié)點的資源列表查詢,如果找到,直接返回;否則,轉入 (2)。
(2)在本云節(jié)點所屬的Chord從環(huán)上按照路由策略進行查找,如果能找到所需資源存放的目標云節(jié)點,則返回查詢結果,否則轉入 (3)。
(3)判斷本云節(jié)點是否為所屬從環(huán)的超級云節(jié)點,若是,則轉為 (5);否則轉為 (4)。
(4)本云節(jié)點將查詢請求發(fā)至所屬從環(huán)的超級云節(jié)點。
(5)超級云節(jié)點在Chord主環(huán)上按照路由查找策略進行查找目標云節(jié)點所屬從環(huán)的超級云節(jié)點,如果成功,則轉下一步;否則,查詢失敗。
(6)目標云節(jié)點所屬從環(huán)的超級云節(jié)點按照路由查找策略在所屬的從環(huán)進行查找目標云節(jié)點,如果能找到,則查詢成功,返回查詢結果;否則,查詢失敗。
本次實驗主要對Chord、MC-Chord和 MFC-Chord 3種模型在相同的環(huán)境下進行仿真,實驗的環(huán)境如下:
(1)操作系統(tǒng):windows xp
(2)機器配置:CPU 2.2GHZ,2.0G 內存
(3)實驗工具:Eclipse (JDK1.5)
(4)仿真模擬器:Peersim
Peersim仿真軟件是一個模擬P2POverlay網絡的通用網絡模擬器,并且支持結構化和非結構化兩種網絡模擬,采用的是JAVA語言進行開發(fā),是BISON項目的一部分,目前主要有兩種模擬方式:Cycle-Base和Event-Driven。
對于平均查詢跳數(shù)實驗,本文設置1000,2000,4000,6000,8000,10000個節(jié)點,每個節(jié)點上有10個文件,分別對3種模型進行30次實驗,得到每種模型的平均查詢跳數(shù),并進行對比,結果如圖3所示。
圖3 平均查詢跳數(shù)比較
由圖3可以看出,MFC-Chord與Chord、MC-Chord相比,平均路由跳數(shù)有所減少,并且隨著節(jié)點數(shù)的增加,MFC-Chord曲線較Chord更為平緩,與MC-Chord曲線趨向于平行。因此MFC-Chord的查詢效率優(yōu)于Chord和MC-Chord。
對于平均查詢延遲實驗,本文設置500,1000,2000,4000,6000,8000,10000個節(jié)點,每個節(jié)點上有10個文件,分別對三種模型進行30次實驗,得到的每種模型的平均延遲,并進行對比,結果如圖4所示。
圖4 平均查詢延遲比較
由圖4可以看出,MFC-Chord與Chord、MC-Chord相比,平均延遲有所減少,并且隨著節(jié)點數(shù)的增加,MFCChord的平均延遲較Chord減少的更加明顯,與MC-Chord相比,平均延遲的減少值趨向于一個常值,因此MFCChord的資源查找效率要優(yōu)于Chord和MC-Chord。
本文在云計算中引進P2P技術,把云服務器充當P2P網絡的網絡節(jié)點,最終建立了MFC-Chord模型,此模型一方面通過構建超級云節(jié)點,解決在Chord系統(tǒng)中沒有考慮的節(jié)點異構性的問題,另一方面通過對Chord路由表算法的改進,減少路由表的冗余信息,擴展了路由表的覆蓋范圍。實驗證明本模型可以有效降低平均查詢跳數(shù)和平均延遲,從而提高資源搜索的效率。
[1]Ozalp Babaoglu,Moreno Marzolla,Michele Tamburini,et al.Design and implementation of a P2Pcloud system [C]//Technical Report UBLCS,2011.
[2]JIA Zhaoqing,YOU Jinyuan.Research of unstructured P2P search algorithms and trust mechanism [D].Shanghai:Shanghai Jiaotong University,2008 (in Chinese). [賈兆慶,尤晉元.非結構化P2P中搜索算法及信任機制研究 [D].上海:上海交通大學,2008.]
[3]JIANG Shouxu,HAN Xixian,LI Jianzhong.Chord system based on super nodes [J].Mini-Micro Computer Systems,2007,28 (2):266-270 (in Chinese). [姜守旭,韓希先,李建中.基于超節(jié)點的Chord系統(tǒng) [J].小型微型計算機系統(tǒng),2007,28 (2):266-270.]
[4]Bartosz Biskupski,Jim Dowling,Jan Sacha.Properties and mechanisms of self-organizing MANET and P2Psystems [J].ACM Transactions on Autonomous and Adaptive Systems,2007,2 (1):1-34.
[5]Stratis Ioannidis,Peter Marbach.On the design of hybrid peerto-peer system [J].ACM SIGMETRICS Performance Review,2008,36 (1):157-158.
[6]Gao W L,Zhang G H,Wang M W,et al.An agricultural information sharing system based on P2Pnetwork technology [J].Intelligent Automation and Soft Computing,2010,16 (6):945-951.
[7]Liu L,Xu J,Russell D,et al.Efficient and scalable search on scale-free P2Pnetworks [J].Peer-to-Peer Networking and Applications,2009,2 (2):98-108.
[8]Zhang Yu,Cao Yuanda,Cheng Baodong.A layered P2Pnetwork topology based on physical network topology [C]//Dalian:4th International Conference on Wireless Communications,Networking and Mobile Computing,2008:1-4.
[9]Yu S,Yu J,Kamil K,et a1.DR-Chord-F an efficient doublering chord protocol[C]//Ummuqi,China:Proc 7th 1EEE Int Conf Grid and Coop Comput,2007.
[10]Kim C S,Lee S,Han J I,et al.DChord:An efficient and robust peer to peer lookup system [J].Malaysian Journal of Computer Science,2010,23 (1):37-48.