改进遗传算法优化数据中心动态网络流量分配

背景知识

通常对于大型的数据中心网络(Data Center Networks, 简称DCN)来说,每一台服务器的使用情况是非常不一样的,而平均使用的情况几乎不存在,大部分的情况都是70%的使用和流量需求会集中在一小部分的服务器上,而这个也是通过LAN网络构建云计算中心所必不可免的问题。

如图是大部分情况下数据中心服务器使用的热点情况:

可以看到,其实大部分资源是相对空置的,所以要令数据中心有更高的运算效率,可想而知就是把其他相对空置的服务器利用起来或者把他们的网络流量尽可能的分配给使用度较高的服务器。

衡量一个数据中心的效率和优化的标准主要是单位时间的网络吞吐量(throughput)。那么如何做才可以提高网络吞吐量,从而提升数据中心的效率呢?

方法对比

改进一

添加无线网络,目前大部分的数据中心内都是使用有线网络的LAN模式,在原有的有线网络中加一个无线网络,可以达到舒缓数据传输伺服器使用不均衡所导致的传输延时,数据堵塞等问题.也可以尽量降低有线网络对于支架台(Rack)的依赖。

改进二

在改进一的基础上,因为无线网络的是需要网络IP地址分配的,而IP地址的数量是有限的,所以如何动态的分配IP地址就是一个需要好好解决的问题,而改进二主要就是通过改进遗传算法,计算当前最适合的IP分配方式,从而使得总体网络的吞吐量最大。

遗传算法

简介

遗传算法其实就是模仿自然界中的生物繁殖过程,把整个过程看成三个部分:

1. selection:选择个体

2. crossover:交叉繁殖

3. mutation: 变异

简而言之,就是不断的重复计算以上三步,选择一个fitness的计算函数,当fitness达到最优的时候,就是算法的最优状态。具体介绍网上有很多,我主要讲一下这个算法的一些特点和如何改进之使得可以很好的用于动态网络中来。

算法特点

1. 该算法和神经网络等算法类似,都是无监督或者半监督的算法,所以在计算的过程中即使输入数据一样也有可能出现不一样的结果。

2. 该算法考虑到了一些变异的情况,所以即使有特点1在,也不妨碍其成为一个更贴近实际情况的模拟算法。

算法改进

在动态网络中,类比生物繁殖的过程,也有一下几个概念:服务器、服务器组、数据中心。每个服务器组是有若干台服务器组成,所以我们类比到生物繁殖,可以把服务器等同于一个DNA,一个服务器组等同于一个个体人,而数据中心就是一个总体环境。

而当我们在无线网络中是,可以重新组合不同的服务器成为一个服务器组,就类比于一个新的个体被繁殖生成。也就是通过crossover可以繁殖出来的新的一个generation,新的generation由多个新的“个体”组成。

而每次迭代生成的generation都需要计算他的fitness情况,从而确定是否是最优的状态。其实就是无线网络中的IP如何分配的问题。

具体如何根据现在有限网络的一些固有情况和无线网络的限制得出fitness计算函数和迭代过程的显示,可以查看参考文献[1]。

代码解释

首先,写了一个生成模拟数的类,主要是随机数得出模拟的数据中心的网络使用情况,前提假设一共有8乘以8,64个服务器组(Rack),每个Rack最多可以20个服务器同时使用,超过15个被使用上了就表示该Rack是一个高使用率的节点。

模拟了两个情况

一个是比较极端的情况就是95%的使用率是在10个热点Rack上的,另一个是比较接近正常情况的情况,70%的使用率是在20个热点Rack上。

情况一:

/* generate matrix of M1, 95% channels from 10 racks*/
void Simulation::GenerateM1(int i)
{
	int m1[8][8]={0};
	int x_sum=0;
	srand((unsigned)time(NULL));
	for(int j=0;j<10;j++){
		int select = rand()%64;
		int m,n;
		m=floor((double)(select)/8);
		n=select%8;
		int channel = rand()%5;
		int X=16+channel;
		if(m1[m][n]==0){
			m1[m][n]=X;
			x_sum += X;
		}
	}
	int total=ceil((double)x_sum/0.95);
	int rest=total-x_sum;
	int count_rest=rest;
	while(count_rest!=0)
	{
		int r=rand()%64;
		int m,n;
		m=floor((double)(r)/8);
		n=r%8;
		if(m1[m][n]==0)
		{
            m1[m][n]=1;
			--count_rest;
		}
	}
	char* filepath="M1_.txt";
	//cout<<filepath<<endl;
	ofstream outfile;
	outfile.open(filepath,ios::app);
	if(!outfile)
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	outfile<<endl;
	for(int p=0;p<8;p++)
	{
		for(int q=0;q<8;q++)
		{
			outfile<<m1[p][q]<<" ";
		}
		outfile<<endl;
	}
	outfile.close();
	GA* ga=new GA(m1);
	ga->select(ga->parent);
	ga->crossover(ga->pairs);
	ga->mutation(ga->children);
	while(ga->check(ga->parent)==0)
	{
		ga->select(ga->parent);
		ga->crossover(ga->pairs);
		ga->mutation(ga->children);
	}
	//output
	mutation_probability=ga->mutaion_probability;
	fitness1 +=ga->MAX_FITNESS;
	generation_count_1 +=ga->gen;
	delete ga;
}

情况二:

/* generate matric of M2, 70% chanels from 20 racks*/
void Simulation::GenerateM2(int i)
{
		int m1[8][8]={0};
		int x_sum=0;
		srand((unsigned)time(NULL));
		for(int j=0;j<20;j++){
			int select = rand()%64;
			int m,n;
			m=floor((double)(select)/8);
			n=select%8;
			int channel = rand()%5;
			int X=16+channel;
			if(m1[m][n]==0){
				m1[m][n]=X;
				x_sum += X;
			}
		}

	int total=ceil((double)x_sum/0.75);
	int rest=total-x_sum;
	int count_rest=rest;
	while(count_rest>0)
	{
		int r=rand()%64;
		int m,n;
		m=floor((double)(r)/8);
		n=r%8;
		int channel = rand()%5+1;
		if(m1[m][n]==0)
		{
            m1[m][n]=channel;
			count_rest -=channel;
		}
	}
	char* filepath="M2_.txt";
	//cout<<filepath<<endl;
	ofstream outfile;
	outfile.open(filepath,ios::app);
	if(!outfile)
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	outfile<<endl;
	for(int p=0;p<8;p++)
	{
		for(int q=0;q<8;q++)
		{
			outfile<<m1[p][q]<<" ";
		}
		outfile<<endl;
	}
	outfile.close();
	GA* ga=new GA(m1);
	ga->select(ga->parent);
	ga->crossover(ga->pairs);
	ga->mutation(ga->children);
	while(ga->check(ga->parent)==0)
	{
		ga->select(ga->parent);
		ga->crossover(ga->pairs);
		ga->mutation(ga->children);
	}
	//output
   	mutation_probability=ga->mutaion_probability;
	fitness2 +=ga->MAX_FITNESS;
	generation_count_2 +=ga->gen;
	delete ga;
}

改进的遗传算法

1.
构造函数: 对数据进行初始化

2. GA::select(Generation generate): 对每一个generation中的所有individuals随机两两一对, 得到很多对

3. GA::crossover(vector<Pair> pairs): 对所有的成对, 进行单点交叉, 生成若干个individuals , 所有的individual就形成了子代

4. GA::mutation(Generation children): 对子代的每一个individual加以进行突变, 就是对每个individual中server按照特定的概率进行权重(weight)的变化

5. GA::check(Generation generate): 对刚生成的子代中的每个个体计算他们的fitness, 选出最大的那一个, 作为后续是否能继续生成下一代的判断标准

6. GA::fitness(Individual individual): 对每个个体的fitness的计算方法

      具体实现可以在资料下载中下载看,我就不都Post出来了。

参考资料

[1]《Dynamic Scheduling for Wireless Data Center Networks》Yong Cui, Member, IEEE, Hongyi Wang, Xiuzhen Cheng, Senior Member, IEEE, Dan Li, Member, IEEE, and Antti Yla¨-Ja¨a¨ ski

资源下载

实现代码下载

 转载请注明出处:http://blog.csdn.net/luoyun614/article/details/42610561

时间: 2024-08-10 16:56:21

改进遗传算法优化数据中心动态网络流量分配的相关文章

能否针对容量和性能来优化数据中心的存储?Adaptec by PMC解决方案给你肯定的答案

能否针对容量和性能来优化数据中心的存储? Adaptec by PMC解决方案给你肯定的答案 Dave Berry 可能需要一个数据中心来帮助我记录下曾访问过的遍布全球的数据中心.然而,无论其地理位置,无论其服务的市场,所有的数据中心都有一个共同的使命:即用最少的资源.以最高的性能.来提供尽可能多的服务. 企业与用户两方面均需要快速而安全可靠的数据访问,另一方面,暴涨的存储内容迫使数据中心不得不添加越来越多的存储容量,同时还要维持客户所期望的高性能. 问题就在于找到一个有效的途径,既能处理日益增

数据中心的五大优化措施

良好的机房环境是保证机房内设备高效率运转的基础.机房环境在设备维护中发挥着不可忽视的作用.如果使用环境不能满足使用要求,就会直接影响系统的正常运行,加速元器件及材料的老化,缩短设 1. 优化数据中心功耗 企业可以采取一些措施和行动来降低数据中心的电力效率低下问题.其中包括:清理或消除不再需要的工作负载,整合工作量(并继续消除目前不再有用的服务器),并用高效新型服务器取代能耗较大的原有服务器.务必寻求提供一个实时电源监控,远程电源插座控制和环境监控功能的解决方案. 2. 收回机架空间 淘汰老旧服务

服务器数据中心基础设施优化的趋势

随着云计算和大数据的发展,IDC数据中心建设迎来建设高潮.不过在数据中心建设过程中存在很多问题,这里汇总一下数据中心基础设施优化的五大趋势. 软件定义和虚拟化 过去的一年中,软件定义技术成为潮流,诸如软件定义网络.软件定义存储.软件定义数据中心等.通过建立底层硬件的抽象层API,企业可以减少硬件的管理数 量和提高管理效率.特别是SDN软件定义网络的产品和解决方案已经出现,这极大地拓展了数据中心网络建设的灵活度,实现跨区域的数据中心部署.去年 VMware提出的软件定义数据中心更是将软件定义技术提

大规模SDN云计算数据中心组网的架构设计

本文首先分析了在大规模SDN数据中心组网中遇到的问题.一方面Underlay底层组网规模受限于设备实际的转发能力和端口密度,单一Spine-leaf的Fabric架构无法满足大规模组网的需求:另一方面在SDN技术实现方案上,Openstack和SDN控制器分别有管理控制能力上的限制. 本文分别从多POD大规模数据中心的Underlay组网及路由规划,和跨POD互联互通SDN技术实现方案两方面,深入到技术细节,结合网络业务流量模型的实现,阐述了大规模SDN数据中心组网架构.1.大规模SDN数据中心

绿色数据中心 提升能效是关键

节能环保的理念已经深深融入到数据中心建设的过程之中.如今,无论是新建数据中心,还是对现有数据中心进行升级和扩容,都视节能环保为第一要务,而实现这一目标的关键是提高数据中心的整体能效.Equinix的实践也充分说明了这一点. 在最新公布的报告<绿色点击:企业如何创建绿色网络>中,Greenpeace(绿色和平组织)分析了包括Equinix公司在内的多家企业如何响应绿色倡议和使用可再生资源抵消运营全球互联网而带来的对环境的潜在影响的情况.作为全球知名的数据中心托管服务商,Equinix在全球拥有

智简魔方DCIM系统如何让数据中心管理变得更简单

随着数据中心在规模.密度和复杂性上的快速增长,数据中心的管理者必须考虑数据中心的效率如何,以及数据中心是否运行在最佳状态 ? 对此,用户一直在寻找更有效的管理工具来降低成本.提高操作性能.节约能源. 这其中,数据中心基础设施的管理问题首当其冲.然而,在当前的数据中心,往往只能获得 IT 和基础设施的局部视图,这种静止和隔离的状态将会带来宕机的增加.低效和容量的浪费.因此,在数据中心管理中,消除基础设施管理和 IT 管理之间的隔阂是亟待解决的问题.智能化工具的出现针对越来越突出的数据中心管理需求,

SDN理解:数据中心物理网络

- 目录 - 云数据中心流量类型 - NSX整体网络结构 - 管理网络(API网络) - 租户网络 - 外联网络 - 存储网络 - openstack整体网络结构 - 管理网络:(上图中蓝线) - 外部网络:(上图中黑线) - 存储网络:(图中红线) - 租户网络:(图中红线) 目录 除去我们上一节提到的cisco 的ACI是与思科封闭,自成一体的SDN解决方案以外,大部分SDN的解决方案的重点都不在硬件设备上.常见SDN解决方案的目的都是尽量在现有的成熟交换机或者标准白牌openflow的交换

[转载] tcp数据重传时间细节探秘及数据中心优化

原文: http://weibo.com/p/1001603821691477346388 在数据中心网络内,机器之间数据传输的往返时间(rtt)一般在10ms以内,为此调内部服务的超时时间一般会设置成50ms.200ms.500ms等,如果在传输过程中出现丢包,这样的服务超时时间,tcp层有机会发现并重传一次数据么?如果设置成200ms以内,答案是没有机会,原因是linux系统下第一次重传时间等于传输的往返时间上至少加上200ms的预测偏差值,即如果rtt值是7ms,第一次重传超时时间至少是2

Overlay对数据中心网络的改进

编者按:Overlay网络方案就是通过在现有网络上叠加一个软件定义的逻辑网络,最大程度的保留原有网络,通过定义其上的逻辑网络,实现业务逻辑,从而解决原有数据中心的网络问题,极大的节省传统用户投资.本文是<Overlay网络与物理网络的关系>的前传,帮助你了解一些关于overlay的基础概念. 云心网络设备随Overlay解决方案会发生什么变化?我们将在本期和下期文章里,力图回答这些问计算大潮将数据中心的网络建设推至聚光灯下,各种解决方案和各种技术标准不断涌现.以VMware为代表的软件厂商提出