通信网负载均衡仿真建模的探索
摘 要 如今,互联网已走进千家万户,上网已成为人们生活工作中一项必不可缺的活动。结合三网融合的大背景,如何提高网络运行速度,如何使互联网中的资源得以合理的利用,如何使网络设备合理使用,已经成为各大网络运营商需要解决的头等大事,对于如何实现负载平衡在互连网工程任务组(IETF)已有许多技术上的设想与讨论,如今有很多路由器都支持局部的负载平衡功能。但是,要在整个互连网制定负载平衡的规范还需要更多理论的讨论和实际的探索。
关键词 负载均衡;网络仿真;交通工程
中图分类号TN91 文献标识码A 文章编号 1674-6708(2013)97-0228-03
第一次接触互连网是1997年,当时在许多地方,互连网的主要用途还只是是收发电子邮件。现在互联网的用途已经不仅于此了。根据中国互连网信息中心2011年的数据,80.9%用户的常用网络服务是即时通讯。其他服务(比如,高清可视电话,网上高清电影等)都因网络带宽的限制而无法实现。中国用户对互连网最不满意的地方就是速度太慢,特别是对于某些没有自己线路的运营商来说,提高网络传输质量,尤为重要。
提高网络通过量的办法有两种。第一种是增加网络带宽,提高交换设备的处理速度;第二种是采用新技术,使负载尽可能地分流到各条路径上,以便充分利用网络资源。
1 仿真的过程
网络仿真是当今检验新技术的一种常用方法。它使用代码与内存来构建网络的各个单元,这些单元的参数可以按照仿真需要设置。尤其重要的是仿真可以节约运行时间,在几天内仿真几年甚至几十年中可能发生的问题。我的主要任务是理论上论述负载平衡的可行性,并把负载平衡加入到仿真器中。
为了解释仿真器的运行方式,作者按照仿真时间顺序介绍一次最简化的仿真过程。
1)建立网络拓扑;
2)建立设置文件;
3)启动仿真器;
4)带宽和拓扑传向路由发生器;
5)每个源在随机时间点产生流量;
6)流量到达目的地以后被自动消除;
7)缓存状态、流量延时信息等被存入数据文件。
2仿真器内核的基本构成
仿真器内核是由CNCL库编写的,而作者重点编写的路由发生器是由LEDA库编写的,之所以使用两个不同的C++库,是因为它们各有特点,然而使用不同的库在联合编译是会有一些问题。
CNCL库是由德国Aachen工业大学通信网教研室开发的C++库,这个库主要用于通信网软件的开发。它比较适合构造仿真器,因为它有产生随机数、事件驱动和统计等功能。
LEDA是一个提供图形数据类型和算法的C++类库。LEDA提供了各种数据类型和算法。LEDA提供了各种数据类型和算法。
2.1 网络拓扑的建立
使用网络教研室已有的Java界面Simgui,可以画所需的网络拓扑。Simgui提供了源、节点、目的地和缓冲等单元,这些单元的参数可以修改。把这些单元按照拓扑结构连接起来,就组成了一张图。这张图可以通过Export命令存为*.cfg文件最简单的一个*.cfg文件如下:
在实际的参数设置中,可以直接在*.cfg文件中修改。
图1表示用LEDA 库建立的节点模型与用CNCL库建立的节点模型的关系。
图1
3 路由发生器的实现
3.1 连接权重的计算
大部分的主干网使用传统的IP路由协议,比如OSPF。这些协议都基于SPF的。而SPF的目标就是计算网络两个节点之间费用最小的路径。这个费用一般是这两个节点之间所有连接的权重(weight)之和,所以一个关键的问题是如何确定每一个连接的权重。
作者选择较为直观的可用带宽。可用带宽是指网络带宽减去正在使用和已经预定的带宽。各个连接的权重与可用带宽一般成反比。可用带宽越大,权重越小,新流量选择这一连接的可能性就越大。具体的计算方法是:
其中CAPACITY是一个可以改变的常量,一般选择各个的连接带宽的公倍数,但是不应太大,以保证每条连接的初始值是一个较小的正整数。对于整个网络而言每分钟产生成千上万的流量,这些流量都会对网络的状况发生影响,从而使可用带宽不断发生变化。
3.2最佳路径的建立和取消
每个连接的权重确定以后,下一个任务就是使用这些权重计算每一个流量要求的最佳路径。这种最佳路径的计算一般使用Dijkstra算法。
从源到目的地的最优路径找到以后,路由发生器的下面的任务就是通知在最优路径上的所有节点为这一流量请求预留网络资源。按照正在使用和预留的带宽计算每个连接的可用带宽,并把结果存到一个连接数组中。同时,按照可用带宽计算各个连接的权重,以备新流量出现时,计算新的最优路径时使用。
这样,用户的流量就从源经过各个指定的中间节点向目的地传递。经过一定的延时以后,这一流量到达目的地。目的地检查这一流量的序列号,然后通知路由发生器这一流量已经结束。路由发生器采取相应的措施,释放占用的网络资源和某些被占用内存。
3.3路由发生器与仿真器内核的接口
首先仿真器内核根据*.cfg设置文件,建立各个源、节点和目的地,同时调用路由发生器的方法new_node(long obj_name,Rsobject *obj),按照图1的方式在路由发生器内部建立各个源、节点和目的地对象。然后,设置器开始把各个源、节点和目的地按照*.cfg中关于网络拓扑的描述,建立基于CNCL的库的各个连接,同时调用路由发生器的方法new_edge(long obj_from, long output_port, long obj_to, long input_port, double bandwidth)建立各个连接,并把节点的端口号通知路由发生器,以备将来使用。
当某个源对象有流量要求时,它就调用路由发生器的方法create_path, 为它计算最优路径,通知最优路径上所有节点为这一流量预留带宽。并为这一流量编号,根据这一统一编号,可以在路由发生器中找到这个流量的带宽和最优路径上所有节点的指针。当流量到达目的地以后,仿真器内核调用路由发生器的remove_path(long flow_number)。路由发生器利用这个统一编号读出带宽大小,从一个列表中依次读出最优路径上的节点,并通知各个节点释放已经占用的带宽。路由发生器除了与仿真器内核有接口外,还有一些用于统计仿真数据的接口函数、输出最优路径到文件和标准输出的接口函数等。
3.4源的实现
源模型主要是描述各个用户的行为。每个用户在何时发送一个流量、流量的大小以及流量的持续时间都是随机的。如何产生统一的负载模型呢?下面介绍一种在本仿真器中使用的方法。
CNCL数据库提供了较好的随机数类。先介绍一个基础随机数产生器Fibonacci。它是由一个称为种子(SEED)的整数作为启动数,不同的SEED产生不同的随机序列。随机序列中的随机数是确定的,也就是说,只要SEED不变,第一次启动时与第二次启动时产生的随机数序列完全一致。随机数应该尽可能地随机,以便正确反映现实世界。但是,用算法实现的随机数只能是伪随机数。也就是说它的随机序列具有一定的周期,第二个周期的随机数与第一个周期的随机数完全一致。一种好的随机数产生器应该在不过多占用内存的前提下,尽可能地使这种周期变大。Fibonacci随机数产生器的周期是N=(2^32-1)*2^96。这一周期足够大,足以反映负载的随机性。
由此整个仿真器的工作方式以及数据的统计设计已经基本完成,可以在计算机上进行实际仿真,得出相应的实验结果,分析该结果可用对网络中的负载均衡有更加进一步的了解。
参考文献
[1]Daniel O.Awduche, Angela Chiu, Anwar Elwalid, Indra Widjaja, Xipeng Xiao, A Framework for Internet Traffic Engineering, INTERNET-DRAFT, May 2000.
[2]Eric C.Rosen, Arun Viswanathan, RossCallon, Multi-protocol Label Switching Architecture, Internet Draft, August 1999.
[3]宛延闺.C++语言和面向对象程序设计.清华大学出版社,1997.
[4]刘红.应用于MPLS网络负载均衡的启发式自适应遗传算法研究,2003.
上一篇:某型飞机模拟仿真系统组建和研究