轉載自: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是同樣的。
先翻譯了,等國慶後再細細研究。歡迎各位同仁拍磚,探討,共同進步。