Jun 30 2010

PeerSim 中文教程:解析 Cycle-based 模式仿真

本文介绍了PeerSim的基本概念,并解析了两个示例以更清晰地说明PeeSim的仿真流程。

Peersim支持两种仿真模式,即Cycle-based的模型和传统的event-based的模型,本文专注于前者,

Cycle-based模型是一个简化的模型,拥有更好的伸缩性及性能,在拥有4GB内存的情况下,event-driven模式目前最多支持十万节点级别,而cycle-based模式则支持千万个节点级别。 但是Cycle-based模型缺少对传输层的仿真和并行处理,节点之间是直接通信的,仿真核心以一定的顺序周期性地给以节点控制。在运行时,可以进行任意的操作,如调用其它对象的方法并执行一些计算。

Cycle-based模型损失了一些真实性,虽然一些简单的协议可以忽略这些差别,但是在选择使用这个模型时,需要注意这些区别。我们可以相对简单地将Cycle-based的仿真移植到Event-driven引擎上,但在本文中不讨论这个话题。

一.基本介绍

PeerSim鼓励基于接口的模块化编程,每一个组件都能被其它实现了相同接口的组件代替,一般的仿真过程如下:

  1. 选择网络大小(即节点数量)。
  2. 选择要实验的一个或多个协议并进行初始化。
  3. 选择一个或多个Control对象来监视感兴趣的属性,并在仿真时修改一些参数(比如,网络大小,协议的内部状态,等等)。
  4. 根据配置文件,调用Simulator类运行仿真。

在仿真时创建的对象都是实现了一个或多个接口的类的实例,主要的接口如下所示:

Node P2P网络是由节点组成的,节点是协议的容器。Node接口提供了对节点所包含的协议的访问方法,并为节点提供了固定的ID。
CDProtocol 这是一个特定的协议,被设计用来在Cycle-based模型中运行,它只定义了在每一个周期中要运行的操作。
Linkable 一般都由协议来实现,这个接口为其它协议提供了访问邻居节点集合的服务,节点间相同的linkable协议类的实例定义了一个覆盖网络。
Control 实现了这个接口的类可以在仿真期间的某个时间点调度执行,这些类一般用于观察或修改仿真过程。

Cycle-based仿真的生命周期是这样的:

  1. 读取配置文件(通过命令行参数传递进来),然后仿真器初始化网络中的节点和节点中的协议,每个节点都拥有相同的协议栈。节点和协议的实例是通过克隆来创建的,只有一个原型是通过构造方法创建,其它的节点和协议都是从这个原型中克隆而来。基于这个原因,协议类中clone方法的实现是很重要的。
  2. 初始化操作,设置每个协议的初始状态。初始化阶段是由Control对象控制运行的,仅在实验开始时运行一次。在配置文件中,初始化的组件可以由init前缀识别,在下面讨论的initializer对象也是controls,但为了标记其功能以区别于一般的Control对象,它被配置用来在初始阶段运行。
  3. 在初始化完成后,Cycle-based引擎在每一个周期中调用所有组件(protocols和controls)一次,直到完成了指定的周期数,或者某个组件决定终止仿真为止。在PeerSim中每一个对象(controls和protocols)都被赋以一个Scheduler对象,它定义了什么时候本组件将会被执行。在默认情况下,所有对象都会在每个周期中运行。但我们也可以配置一个protocol或control只在某些特定的周期中运行,也可以在每一个周期中指定组件的执行顺序。

Continue reading


Dec 31 2009

PlanetLab

         估计明年主要工作都集中在P2P-CDN的仿真器上,之前做过一些调研,是关于PlanetLab的,而国内关注的人极少,只有少数一些大学的实验室有过相关的应用,而且由于Cernet作为一个整体被除名,中国的使用人数应当大减了。就实验室的项目来说,原本我以为是要设计一个P2P-CDN的混合系统,现在已经变更为设计一个P2P-CDN的模拟器,所以PlanetLab是不可能得到应用,不过这里的一些信息可能对需要它的人有用。

—————–华丽丽的分割线———————

         PlanetLab是一个全球性的研究网络,用于新型网络服务的开发。自从2003年起,超过1,000个来自顶级学术机构和业界实验室在PlanetLab上开发了新技术包括:分布式存储、网络印射、P2P系统、DHT(分布式哈希表)和查询处理。并且值得关注的是在这个平台上,P2P分布式计算的项目很多,甚至是基于P2P的CDN实现和部署。

 http://www.planet-lab.org/

         截止至2009年12月,PlanetLab目前拥有1063个节点和491个站点,很多世界一流大学和行业研究实验室成为PlanetLab计划的联盟成员,其中包括AT&T实验室、剑桥大学、法国电信、HP、Google、NEC实验室、哈佛大学、普林斯顿大学和加州大学伯克利分校连同中国华为集团、以及Internet2机构。2009年5月,PlanetLab中心升级至4.3版本,可以支持新的节点类型(如无线节点),同时加入一些新的GUI特性。

          PlanetLab的主要目标之一是用作重叠网络的一个测试床。研究组能够请求一个PlanetLab分片,其中他们能够试验各种全球规模的服务,包括文件共享和网络内置存储、内容分发网络、路由和组播重叠网、QoS重叠网、可扩展的对象定位、可扩展的事件传播、异常检测机制和网络测量工具。目前有数百个活跃的研究项目运行于PlanetLab之上。

         对研究人员而言使用PlanetLab的好处是:可以在真实世界条件下大规模试验新服务,因为节点广泛分布于Internet,是一个由遍布世界各地的服务器组成的网络,能够观察并对网络行为做出反应;从位于许多数据源和数据终点的邻近范围而受益;从分布于多个管理的边界而受益。

         PlanetLab是一个大规模互联网服务的测试床,在其上更多的狭窄定义的虚拟测试床能够被部署)。网络研究人员能够使用这项基础设施来试验对于Internet协议簇的修改和扩展。除了支持短期试验外,PlanetLab也设计用来支持长期运行的服务,这些服务支持一个用户基础(用户群)。即PlanetLab不但是一个测试床,也是一个部署平台,支持一个应用的无缝迁移,从早期原型,通过多次设计迭代,最后转变为一项持续演进的成熟服务。

          2004 年12月27日中国教育和科研计算机网(CERNET)宣布,CERNET已加入PlanetLab,首先在中国20个城市的25所大学( 包括清华,北大,北航,北邮 )中设立50个 PlanetLab节点,这使得CERNET成为亚洲第一个地区性PlanetLab研究中心,但是在2009年6月1日,PlanetLab重新考虑了CERNET地位,指出PlanetLab接受的成员是研究机构/大学,而不是“国家组织”如CERNET,因此要求所有CERNET地址的中国大学重新申请为独立成员。个人不能直接参与到PlanetLab中,必须是PlanetLab的成员。截止到写这篇文章为止,国内也仅有少数的大学通过审批,更多的则是处于pending状态,更多被除名的大学则没有重新提交过申请。

          建立在PlanetLab之上的一些成功案例,在这里主要是针对P2P-CDN系统来说明的:

CoralCDN

基于P2P的CDN网络:www.coralcdn.org/

CoralCDN是一个免费的P2P内容分发网络,由世界范围内的web代理和域名服务器组成,它允许用户在之上建立一个高性能大需求的web网站。它于2004年的3月,在PlanetLab上进行测试。可以免费地下载CoralCDN的源代码,源代码是由C++完成的,超过一万行。

CoDeeNA Content Distribution Network for PlanetLab

主页:http://codeen.cs.princeton.edu/

CoDeeN是由普林斯顿大学开发的学术性的CDN网络实验平台,且这个CDN网络由众多的PlanetLab节点组成,当前很多缓存服务器部署在PlanetLab的节点之上,这些缓存服务器同时作为request redirectors和server surrogates,它们相互合作提供了一个快速而健壮的web内容分发服务。

同时,它还包括以下的子项目:

最后,特别推荐一篇文章:http://ww2.cs.mu.oz.au/~apathan/CDNs.html,具体描述了CDN技术的前沿方向。