译文:Chord implementation for Peersim

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是同样的。

先翻译了,等国庆后再细细研究。欢迎各位同仁拍砖,探讨,共同进步。加QQ:185851486(注明P2P)

你可能感兴趣的:(java,网络,文档,p2p)