Chord implementation for Peersim

轉載自:http://m.blog.csdn.net/blog/qianfu111/8030005#

1、配置文件

這個文檔解釋了怎樣寫允許在PeerSim網絡仿真中執行的配置文件。這是config-chord.cfg例子的內容

# random.seed1234567890

simulation.endtime10^6

simulation.logtime10^6

simulation.experiments1

network.size 5000

protocol.trUniformRandomTransport

{

mindelay 0

maxdelay 0

}

這些行是PeerSim事件驅動協議裏的標準描述:

第一行定義了被用來產生僞隨機數的種子(如果取消註釋,所有的仿真表現一樣,對debugging是有用的)

第二和第三行定義了仿真結束和結果日誌所採用的時間

第四行實驗次數

第五行在網絡中節點數目

最後一個命令創建一個用來在兩個節點之間發送消息的傳輸協議

protocol.myChordProtocol

{

transport tr

}

這是我們定義在每一個節點上模仿chord應用程序行爲的核心協議的地方,消息將通過上面所定義的傳輸協議交換。

control.trafficTrafficGenerator

{

protocol my

step 100

}

現在我們需要距離說明一個實現control的子類,其將產生查詢協議(源和目的地是隨機選擇)每一個預先定義的時間步驟。

init.createCreateNw

{

protocol my

idLength 128

succListSize 12

}

在仿真之前,我們一定要創建完美的chord網絡。CreateNw類將通過產生Chord標識符(在idLength指定的字節數裏隨機選擇)初始化每一個節點,連接後繼(succListSize是後繼列表的大小)和其他參數。

control.observerMessageCounterObserver

{

protocol my

step 90000

}

協議所需要的基本執行的最後一部分是observer,它計算出在查找前綴的平均跳數等。這些結果在每一個指定步驟的時間裏打印出。

control.dnetDynamicNetwork

{

add 20

add -25

minsize 3000

maxsize 7000

step 100000

init.0 ChordInitializer

{     

protocol my

}

}

爲了在churn條件測試協議(節點頻繁加入和離開),我們使用了PeerSin提供的control,動態網絡,通過說明節點加入或者離開的數量,網絡維度的邊界和步驟時長來自定義。爲了允許我們的Chord協議能夠接受在網絡中的新節點,每一個節點一定要在初始化行初始化。已經成爲chord換上一部分的節點將被隨機選擇去幫助新節點發現後繼和路由表項。在理想條件下(不考慮churn、可靠性、傳輸層)協議的執行導致結果可以預測:最大跳數(一個查找消息一定要在到達正確目的地前所通過的)是的上界。當然這些數一定要是一個整數(所以12,29成了13跳數的界限)平均跳數可預測是低的(記住:從一個節點到他自身的查找也會發生的)。這些參數是固定的:128位的ID長和路由表項,12作爲後繼列表的大小,10^6作爲每次試驗大約9000消息處理的仿真時間

2、運行代碼

爲了執行配置文件,運行下面的命令:

java -cp peersim-1.0.3.jar:djep-1.0.0.jar:jep-2.3.0.jarpeersim.Simulator

config-chord.txt

3、結果

爲了正確判斷行爲,不考慮動態網絡(節點失效,加入),我們一定要考慮更多的參數,尤其是調用穩定方法的次數和在到達目的地前失敗次數(在這種情況下消息是被丟棄的)固定參數是:129作爲idLength,12作爲後繼列表大小,5000作爲初始網絡大小,3000和7000作爲網絡大小的上下界,執行時間代表之前仿真和動態control步設置在10s。正如你所注意的:環的移除處理不是很關鍵的。失敗數是有限的(非常低以至於不會出現在圖中),最大跳數是可接受的(15代替13)。記住:穩定性是節點調用stabilize()的次數,在每次後繼列表或者路由被表更新時執行(發生很多次在每次交互時),所以這是高可預測的:在仿真期間網絡規模減少或者增強原始大小的百分之二十。當一個節點正在加入,我們注意到失效數會增加:這是因爲失效是發生在節點和它的後繼之間,當發送消息到相應的chord id時,必須在聲明的只移除的條件下的。以至於我們能夠假設消息是從一個同時失效的節點產生的。問題是爲了處理加入的一致性,初始化器不能絕對正確的決定一個節點的後繼(性能會過於緩慢)但只有一個節點沒有遠離,然後在每一次交互新節點將調整他的後繼指針到環中更近的節點。不幸的是在許多消息到達處理過程中,如果他們是直達新節點和後繼節點之間的節點,消息將被丟棄。這解釋了伴隨着節點加入失效數反而增加。然而在更長的模擬中,後繼列表將被調整直到沒有更多失效發生。平均和最大跳數在不考慮churn是同樣的。

先翻譯了,等國慶後再細細研究。歡迎各位同仁拍磚,探討,共同進步。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章