摘 要: Scribe提供了一種有效的算法可以較小的計算量查找到最佳節(jié)點(diǎn)。然而,,該算法在查找的過程中,需要不斷地進(jìn)行網(wǎng)絡(luò)臨近性測量來比較,、判斷、查找最佳節(jié)點(diǎn),,耽誤時間,。特別是在中國電信和中國網(wǎng)通" title="網(wǎng)通">網(wǎng)通互聯(lián)互通問題比較嚴(yán)重的網(wǎng)絡(luò)環(huán)境下,情況會進(jìn)一步惡化,。為了更快地查找到最佳節(jié)點(diǎn),,減少最終用戶的等待時間" title="等待時間">等待時間,解決應(yīng)用層組播" title="組播">組播技術(shù)在中國應(yīng)用的具體問題,,充分利用了Scribe節(jié)點(diǎn)運(yùn)行過程中的歷史數(shù)據(jù)和已知的IP地址數(shù)據(jù)庫,,優(yōu)化了Scribe最佳節(jié)點(diǎn)查找算法。模擬實(shí)驗(yàn)顯示,,該算法將最佳節(jié)點(diǎn)查找速度提高了5%左右,。
關(guān)鍵詞: 對等網(wǎng)絡(luò)(P2P); 應(yīng)用層組播" title="應(yīng)用層組播">應(yīng)用層組播,; 終端系統(tǒng)組播(Scribe),; 流媒體
?
最近幾年,流媒體直播越來越受到廣泛的關(guān)注,。IP組播是支持流媒體直播的最有效技術(shù),。然而,相關(guān)技術(shù)研究雖然經(jīng)歷了十多年的發(fā)展,,并未能得到廣泛應(yīng)用,。于是近年來不少學(xué)者提出了應(yīng)用層組播技術(shù)。
應(yīng)用層組播系統(tǒng)大多是建立在P2P技術(shù)基礎(chǔ)上的,。目前P2P最流行的算法就是DHT算法,。但在大多數(shù)DHT算法中,節(jié)點(diǎn)標(biāo)識符是隨機(jī)選擇的,,而鄰居關(guān)系只是基于這些標(biāo)識符來建立,。如何合理地將節(jié)點(diǎn)的地理位置考慮進(jìn)去,優(yōu)化DHT算法,,使該算法在保留原有優(yōu)點(diǎn)的基礎(chǔ)上更快地找到最佳節(jié)點(diǎn),,對于應(yīng)用層組播的推廣應(yīng)用有著非常重要的理論意義。在2005年,,中國利用應(yīng)用層組播技術(shù)建立的商業(yè)公司如雨后春筍般地涌現(xiàn)出來,,如UUSEE、PPLIVE,、PPSTREAM等,,但都面臨著中國電信與中國網(wǎng)通網(wǎng)絡(luò)互聯(lián)互通問題。如何優(yōu)化DHT算法,,對于在中國互聯(lián)網(wǎng)上提供應(yīng)用層組播服務(wù)也有著更積極的現(xiàn)實(shí)意義,。
Scribe是在Pastry基礎(chǔ)上開發(fā)的一個可擴(kuò)展的應(yīng)用層組播體系結(jié)構(gòu)。Scribe充分利用了Pastry的可靠性,、自組織性和網(wǎng)絡(luò)位置屬性,。本文在Scribe最佳節(jié)點(diǎn)選擇算法的基礎(chǔ)上,充分利用了Scribe節(jié)點(diǎn)歷史數(shù)據(jù)和已知的IP地址庫,,有效地提高了Scribe查找最佳節(jié)點(diǎn)的速度,。
1 算法設(shè)計
1.1 最佳節(jié)點(diǎn)的定義
應(yīng)用層組播算法的一個特點(diǎn)是:它的設(shè)計是針對某種應(yīng)用進(jìn)行優(yōu)化,所以哪一個點(diǎn)是新加入組播樹的節(jié)點(diǎn)的最佳節(jié)點(diǎn)并沒有準(zhǔn)確地定義,。本文根據(jù)自身的理解和實(shí)際工作的經(jīng)驗(yàn),,從實(shí)際應(yīng)用的角度做了如下定義:
(1)距離新加入節(jié)點(diǎn)延時最小的節(jié)點(diǎn)
應(yīng)用層組播的首要任務(wù)是要給用戶提供穩(wěn)定的、高質(zhì)量的音視頻流,。與組播節(jié)點(diǎn)延時最小的上層節(jié)點(diǎn),,通常都是網(wǎng)絡(luò)位置較近的、網(wǎng)絡(luò)環(huán)境相對比較穩(wěn)定的點(diǎn),。所以,,延時最小應(yīng)該是最佳節(jié)點(diǎn)的第一判斷標(biāo)準(zhǔn)。
(2)距離組播樹的根路徑最短的節(jié)點(diǎn)
由于應(yīng)用層組播多用于音視頻直播,,組播樹最底層的節(jié)點(diǎn)與根節(jié)點(diǎn)之間的延時是需要考慮的問題,。如果直播內(nèi)容的延時過大,對于用戶體驗(yàn)來說就相對較差,,特別是對一些體育比賽的直播,。因此,把距離組播樹的根路徑最短列為最佳節(jié)點(diǎn)第二重要的判斷標(biāo)準(zhǔn),。
(3)處理能力空余多的點(diǎn)
為了整個系統(tǒng)的穩(wěn)定性以及避免過熱點(diǎn)的存在,,應(yīng)用層組播應(yīng)該盡量控制節(jié)點(diǎn)的度,防止組播樹的某些點(diǎn)過熱,。節(jié)點(diǎn)的空余處理能力是選擇最佳節(jié)點(diǎn)的第三標(biāo)準(zhǔn),。
通常情況下,,最佳節(jié)點(diǎn)的選擇,要根據(jù)三個條件統(tǒng)一考慮,。本文只限于討論第一個標(biāo)準(zhǔn):在一個新節(jié)點(diǎn)加入組播樹時,,花費(fèi)多長時間才能找到相對它的最佳節(jié)點(diǎn)(延時最小的節(jié)點(diǎn)),如何縮短這個時間以減少用戶的等待時間,。
1.2 Scribe節(jié)點(diǎn)加入機(jī)制
Scribe是在Pastry基礎(chǔ)上開發(fā)的一個可擴(kuò)展的應(yīng)用層組播體系結(jié)構(gòu),。Pastry是目前業(yè)界比較活躍的開放的P2P研究項(xiàng)目,2007年2月剛剛發(fā)布了2.0的版本,。Pastry也是業(yè)界考慮節(jié)點(diǎn)網(wǎng)絡(luò)位置的DHT算法中的一個,。
Scribe使用Pastry來管理組的創(chuàng)建、組的加入和基于每個組的組播樹的建立,。Pastry和Scribe是全分布式的:所有的決定都基于本地信息,;每個節(jié)點(diǎn)都有同樣的能力;每個節(jié)點(diǎn)都可以是組播源,、組播樹的根,、組成員、組播樹上的一個節(jié)點(diǎn)或者是上述任何角色的混合,。Scribe給應(yīng)用層提供了簡單的API接口,。Scribe的完整表述和評估見參考文獻(xiàn)[1]。
Scribe建立一個組播樹,,并以匯合點(diǎn)(rendez-vous)為根,,向組內(nèi)成員發(fā)送信息。組播樹是以類似逆向路徑轉(zhuǎn)發(fā)方案建立起來的,,是由組成員到匯合點(diǎn)的路由組成的,。組的加入操作是以一種分布式的方法進(jìn)行的,可以支持大型的,、動態(tài)的成員關(guān)系,。
組播樹中的Scribe節(jié)點(diǎn)被稱作該組的轉(zhuǎn)發(fā)器(forwarders),它們可能是也可能不是組的成員,。每一個轉(zhuǎn)發(fā)器都有一個子表,,它包含該點(diǎn)在組播樹中所有的孩子節(jié)點(diǎn)(包括IP地址和nodeId)。
當(dāng)一個Scribe節(jié)點(diǎn)要加入一個組時,,它要求Pastry路由一條以groupId為關(guān)鍵字的JOIN信息,。這條信息被轉(zhuǎn)送到組的匯合點(diǎn)。在這條路由的每個節(jié)點(diǎn)上,,Pastry檢查自己的所屬組列表,,看是否已經(jīng)是該組的forwarder。如果這個節(jié)點(diǎn)還不是該組的forwarder,它就創(chuàng)建一個組的入口,,并把源點(diǎn)加到與該組相關(guān)的子表中,。然后,,它通過沿著加入節(jié)點(diǎn)到匯合點(diǎn)的路由的下一個點(diǎn)發(fā)送一條JOIN消息成為該組的forwarder。如果是,,它就接收這個點(diǎn)作為自己的孩子,,并把它加到自己的子表中。原來從源節(jié)點(diǎn)發(fā)出的信息則被終止,。
圖1為Scribe的組加入機(jī)制。圓圈代表節(jié)點(diǎn),,有一些節(jié)點(diǎn)顯示了nodeId。為簡單起見,,設(shè)pastry的配置參數(shù)b=1,,所以每次前綴只匹配1個bit。假設(shè)有一個groupId為1100的組,,它的匯合點(diǎn)的nodeId和groupId相同,,nodeId是0111的節(jié)點(diǎn)正在加入這個組。在這個例子中,,Pastry路由一個JOIN消息到node1001;然后這個消息又從1001路由到1101,;最后,從1101來的消息到達(dá)1100,。這個路由在圖1中用實(shí)線表示,。
?
假設(shè)節(jié)點(diǎn)1001和1101還不是group1100的轉(zhuǎn)發(fā)器。那么節(jié)點(diǎn)0111的加入將使得這個路由上的兩個節(jié)點(diǎn)成為該組的forwarder,并且把該點(diǎn)加入到它們的子表中,。假設(shè)節(jié)點(diǎn)0100決定加入這個組,,JOIN消息的路由在圖1中以點(diǎn)實(shí)線箭頭表示。由于1001點(diǎn)已經(jīng)是一個轉(zhuǎn)發(fā)器,,它把0100節(jié)點(diǎn)加到自己的子表中,,JOIN消息就被中斷了。
1.3 尋找最佳節(jié)點(diǎn)
從上面Scribe的節(jié)點(diǎn)加入機(jī)制可以看出,,Scribe最佳節(jié)點(diǎn)的選擇主要決定于Pastry將其JOIN消息路由到的第一個節(jié)點(diǎn),。而這一個點(diǎn)的選擇是依靠Pastry的路由表" title="路由表">路由表決定的。所以,,為Scribe尋找最佳節(jié)點(diǎn)的工作,,其實(shí)就是在Pastry節(jié)點(diǎn)加入Pastry網(wǎng)絡(luò)時對節(jié)點(diǎn)路由表和葉子節(jié)點(diǎn)集合進(jìn)行的初始化上。
在Pastry中,,一個新節(jié)點(diǎn)X若加入Pastry網(wǎng)絡(luò),,必須知道一個在網(wǎng)絡(luò)上相近的節(jié)點(diǎn)A.X向A發(fā)出一個關(guān)鍵字為自己的路由請求,這條信息將會一直轉(zhuǎn)發(fā)到在nodeId空間里離X最近的節(jié)點(diǎn),。X將接收路由過程中所有節(jié)點(diǎn)的路由表,,經(jīng)過整理后得到自己的路由表和葉子節(jié)點(diǎn)集合,。
而一個新加入的點(diǎn)如何發(fā)現(xiàn)網(wǎng)絡(luò)上相近的Pastry節(jié)點(diǎn),一種方法是使用一種叫“expanding ring”的IP組播方式,,但這需要網(wǎng)絡(luò)支持組播,。Pastry使用了一種有效的算法,,它可以通過位于任何位置的Pastry節(jié)點(diǎn)找到離自己最近的節(jié)點(diǎn),。圖2的流程圖表示了Pastry的最佳節(jié)點(diǎn)發(fā)現(xiàn)算法。這個算法使用了這樣一個屬性:種子(seed)節(jié)點(diǎn)的葉子節(jié)點(diǎn)集合的位置應(yīng)該在網(wǎng)絡(luò)上均勻地分布,。在葉子節(jié)點(diǎn)中找到較近節(jié)點(diǎn)后,路由表的距離屬性被用來成指數(shù)倍地減少靠近新加入的節(jié)點(diǎn),。這是通過在路由表中反復(fù)遞歸查找最近點(diǎn)實(shí)現(xiàn)的,。Pastry最近節(jié)點(diǎn)查找方法的詳細(xì)說明可參見參考文獻(xiàn)[2]。
?
從Pastry的節(jié)點(diǎn)加入算法可以看出,,Pastry保留了網(wǎng)絡(luò)鄰近性不變,。然而,在比較最近節(jié)點(diǎn)時是需要進(jìn)行實(shí)際測量的,,因此需要較長的等待時間,。下面,將介紹如何縮短等待時間,。
1.4 優(yōu)化算法
1.4.1 歷史數(shù)據(jù)
任何一個Pastry節(jié)點(diǎn)在加入Pastry網(wǎng)絡(luò)之前,,對Pastry網(wǎng)絡(luò)的狀況都是一無所知的。但在加入這個網(wǎng)絡(luò)并平穩(wěn)運(yùn)行一段時間之后,,它會了解到對于它自己而言,相對穩(wěn)定且臨近的Pastry節(jié)點(diǎn)和Scribe上層節(jié)點(diǎn),。因此在它退出之后,,再重新加入這個組播組時,這些歷史信息對它本身而言還是相對有效的,。但由于組成員是動態(tài)的,原來網(wǎng)絡(luò)連接質(zhì)量好的節(jié)點(diǎn),,可能已經(jīng)離開了組播組,。如果它仍然在組播組中,將會極大提高該節(jié)點(diǎn)尋找到最佳節(jié)點(diǎn)的速度,。
Pastry使用定時(每20分鐘)運(yùn)行的路由表管理任務(wù)來保證路由表中的每一入口都是nodeId滿足條件的節(jié)點(diǎn)當(dāng)中的最靠近自己的節(jié)點(diǎn),。當(dāng)發(fā)現(xiàn)比當(dāng)前節(jié)點(diǎn)更靠近自己的節(jié)點(diǎn)時,Pastry替換成更近的節(jié)點(diǎn),,并把原節(jié)點(diǎn)保留在一個備份列表中,,以便當(dāng)最近節(jié)點(diǎn)失效時,可以馬上替換回來,。Pastry為每個入口最多保留10個備份節(jié)點(diǎn),,這些歷史數(shù)據(jù)對于該節(jié)點(diǎn)是非常寶貴的,但是Pastry和Scribe只把這些數(shù)據(jù)保存在內(nèi)存中,,節(jié)點(diǎn)退出之后,,這些數(shù)據(jù)就被釋放掉了。而本算法則將這些數(shù)據(jù)定期保存到硬盤上,,這樣當(dāng)該節(jié)點(diǎn)再次進(jìn)入Pastry網(wǎng)絡(luò)時,,可以充分利用這些歷史數(shù)據(jù)。
在后面的測試數(shù)據(jù)中可以看出,,在組播組的人數(shù)達(dá)到一定規(guī)模的穩(wěn)態(tài)時,該算法能夠有效提高最佳節(jié)點(diǎn)查找的速度,。但是這個算法對于第一次加入的節(jié)點(diǎn)沒有任何作用,。
1.4.2 IP地址庫
在我國,由于眾所周知的原因,,中國電信和中國網(wǎng)通兩大電信運(yùn)營商之間的網(wǎng)絡(luò)互聯(lián)非常差,。而Pastry中nodeId的生成是不考慮實(shí)際網(wǎng)絡(luò)位置的。在nodeId空間中,,相鄰兩點(diǎn)在網(wǎng)絡(luò)位置上相距很遠(yuǎn)的可能性非常大,。也就是說,nodeId相鄰的兩個點(diǎn)很可能一個在網(wǎng)通,,一個在電信,。如果在這種條件下,仍然采用1.2節(jié)中的算法尋找最佳節(jié)點(diǎn),,就會耽誤很多時間,。
經(jīng)過多年的測試和搜集,已經(jīng)有人成功地搜集完中國電信,、中國網(wǎng)通以及其他中國主要ISP的IP地址網(wǎng)段,。如果在使用圖2的尋找方案中,,充分利用該IP地址庫,,則可以有效降低等待網(wǎng)絡(luò)探測的時間,加快最佳節(jié)點(diǎn)的尋找速度,。這一算法對提高新節(jié)點(diǎn)第一次加入組播組的速度會有一些幫助,。但是,這個算法只對中國或互聯(lián)網(wǎng)狀況類似中國的網(wǎng)絡(luò)才適用。
1.4.3? 算法的實(shí)現(xiàn)
實(shí)現(xiàn)過程:
? (1)在Scribe節(jié)點(diǎn)正常運(yùn)行中,,定期地將節(jié)點(diǎn)的路由表,、葉子節(jié)點(diǎn)集合、Ping包延時表等相關(guān)數(shù)據(jù)保存到硬盤上,。當(dāng)節(jié)點(diǎn)退出后再進(jìn)入時,,首先載入這些歷史數(shù)據(jù)和IP地址數(shù)據(jù)庫,然后按照圖3的流程進(jìn)行處理,。
(2)圖3顯示了根據(jù)優(yōu)化算法對Pastry節(jié)點(diǎn)加入網(wǎng)絡(luò)初始化時的流程圖,。
?
圖3與圖2比較可以發(fā)現(xiàn),第2,、3,、5、7,、9步為修改的地方,。第2步,如果種子節(jié)點(diǎn)原來就在本機(jī)保存的最佳節(jié)點(diǎn)紀(jì)錄中,,直接返回最佳節(jié)點(diǎn),。第3步,如果種子節(jié)點(diǎn)的IP地址和本機(jī)不屬于同一個電信運(yùn)營商,,重新抓取另一個種子(系統(tǒng)通常會提供多個種子),,但不屬于同一個ISP的兩點(diǎn)在網(wǎng)絡(luò)上相鄰的可能性很小。第5,、7,、9步,在從某個集合中挑選最近節(jié)點(diǎn)時,,都使用類似第2,、3步的判斷方法:首先查看該點(diǎn)是否是本機(jī)保存的最佳節(jié)點(diǎn),如果是,,就直接跳到第12步,,結(jié)束搜索過程。如果不是,,則比較該點(diǎn)IP地址是否和本機(jī)屬于同一個ISP,如果不是,,則跳過測試比較的步驟,節(jié)省搜索時間,;如果是,,則仍按照以前的步驟,進(jìn)行測試比較,。下面的實(shí)驗(yàn)表明,,該算法可以有效提高Scribe最佳節(jié)點(diǎn)的選擇速度。
2 性能分析和測試
2.1 試驗(yàn)環(huán)境和機(jī)制介紹
Pastry提供的網(wǎng)絡(luò)模擬器是基于包級別的、離散的網(wǎng)絡(luò)模擬器,。這個模擬器可以模擬物理鏈路上的傳播延時,,最多可以模擬10萬個節(jié)點(diǎn),但是不能模擬排隊延時,、包丟失,。
實(shí)驗(yàn)使用Pastry的配置為b=4, 葉子節(jié)點(diǎn)集合大小l=16。利用Pastry/Scribe提供的API及例子程序開發(fā)一個小程序,。該程序設(shè)定所有的Pastry節(jié)點(diǎn)都運(yùn)行Scribe,,不運(yùn)行其他的P2P應(yīng)用。每個Scribe節(jié)點(diǎn)都加入同一個組播組,,第一個節(jié)點(diǎn)既當(dāng)信息發(fā)布源,,又當(dāng)組播樹的根。其他的節(jié)點(diǎn)一旦加入Pastry就立刻加入組播組,,并開始接收數(shù)據(jù),。把N個節(jié)點(diǎn)一個一個地加入,計算每個節(jié)點(diǎn)從加入開始到正常接收Scribe數(shù)據(jù)的時間,,然后計算平均值,。在不同的N值分別測試10次,以利用程序保存下來的歷史數(shù)據(jù),。把模擬試驗(yàn)所使用的N×N的延時矩陣文件,人為分為兩個部分,,分別模擬兩大運(yùn)營商,。并在程序中給出類似IP地址的區(qū)分判斷。由于試驗(yàn)設(shè)備的限制,,本次試驗(yàn)的N的最大值為4 000,。
以Pastry提供的網(wǎng)絡(luò)模擬器測試經(jīng)過優(yōu)化過的Scribe程序。作為比較,,把沒有經(jīng)過優(yōu)化的Scribe程序也在相同的模擬器上運(yùn)行,。由于模擬器本身對時間參數(shù)作了優(yōu)化,因此,,時間的絕對值可能沒有什么參考價值,,但優(yōu)化程序的加速比率卻有一定的參考意義。
2.2 試驗(yàn)數(shù)據(jù)和結(jié)論
測試的結(jié)果如圖4所示,。從圖中可以看出,,隨著節(jié)點(diǎn)數(shù)的增加,節(jié)點(diǎn)選擇最佳節(jié)點(diǎn)的時間也在增加,。這主要是由于節(jié)點(diǎn)多時,,節(jié)點(diǎn)加入需要交換的信息也越來越多所致。從兩種算法的比較可以看出,優(yōu)化的算法在節(jié)點(diǎn)數(shù)少時,,沒有任何優(yōu)勢,。這主要是因?yàn)楣?jié)點(diǎn)少,需要進(jìn)行測試的時間也比較少,,加速優(yōu)勢體現(xiàn)不明顯,。隨著節(jié)點(diǎn)的增多,可以看出,,經(jīng)過優(yōu)化的算法要比原算法有優(yōu)勢,。原算法的最佳節(jié)點(diǎn)的平均尋找時間起伏比較大,而優(yōu)化的算法則相對比較穩(wěn)定,。新算法的節(jié)點(diǎn)加入速度大約是原算法的95%左右,。
?
本文介紹了利用歷史數(shù)據(jù)和IP地址庫提高Scribe最佳節(jié)點(diǎn)查找速度的一種算法。模擬實(shí)驗(yàn)顯示,,該算法對于中國的互聯(lián)網(wǎng)現(xiàn)狀還是有一定效果的,。下一步的工作,應(yīng)當(dāng)充分考慮最佳節(jié)點(diǎn)的其他標(biāo)準(zhǔn),,統(tǒng)一優(yōu)化查找速度,。事實(shí)上,該算法不僅可以用來提高Scribe最佳節(jié)點(diǎn)的查找速度,,也同樣適用于所有結(jié)構(gòu)化P2P網(wǎng)絡(luò)上的應(yīng)用層組播系統(tǒng),。
參考文獻(xiàn)
[1] ?CASTRO M, DRUSCHEL P, KERMARREC A M, et al.?SCRIBE: a large-scale and decentralized application-level ?multicast infrastructure. IEEE Journal of Selected Areas in?Communications, 2002,20(8).
[2] ?CASTRO M, DRUSCHEL P, HU Y C, et al. Exploiting?network proximity in peer-to-peer overlay networks. BertinoroItaly: International Workshop on Future Directions in?Distributed Computing(FuDiCo), 2002.