Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9262018
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 云计算

2014-02-18 12:07:08

IaaS云计算弹性扩展的实现以及算法

2010年08月19日09:39
字号:T|T

  一、什么是弹性扩展

  弹性扩展最早是亚马逊提出的概念,弹性扩展针对的是云应用本身的一种动态的扩展,在云应用运行期间实现支撑云应用的虚拟机实例个数的动态增加或者减少,通俗点就是在负载较高的时候启动较多的实例,负载较低的情况停止一些实例。弹性扩展为云应用实现了真正意义上的资源按需分配。弹性扩展并不是简简单单的凭空复制,对于应用服务来说,增加服务器个数只是增加资源计算能力,还需要传统意义上的“集群”技术将它联合成一个整体对外提供服务。对于IaaS来说,它不会因为特殊的业务规则对应用进行限制,导致应用做相应的更改,这违背了它产生的本意,它更多的是关注整体行为,无论什么应用都可以在其运行,并享受它一致各种服务。由此可见弹性扩展中对应用部署所需的虚拟机是预先创建的,并由应用实施者通过内网组建一个集群,这些虚拟机放入到一个pool中,按照策略进行启动所需的虚拟机实例,说白了IaaS管理服务只关注池里面有多少虚拟机,然后按策略停止或者启动这些虚拟机。

  二、弹性扩展实现

  首先云用户通过管理portal,可以定义一个pool,将需要实现弹性扩展的虚拟机加入到pool,原则上是一个应用对应一个pool,并设置弹性扩展策略,主要是IaaS管理服务调度算法涉及的参数有关,如下所示:

  Pool max size:这与云用户加入的虚拟机个数有关;

  Pool min size:该值缺省为1,表示最小运行情况下的虚拟机个数;

  High load limit:表示整体运行负载超过该值时,就需要投运新虚拟机;

  Lower load limit:表示整体运行负载低于该值时,就需要停运虚拟机,将虚拟机放入到闲置的pool中。

  Step start count:该值缺省为1,表示每次投运的个数

  Step stop count: 该值缺省为1,表示每次停运的个数

  然后对于云用户来说还需要一个动态监控的界面,监控该pool动态变化。

  对于IaaS平台来说要实现弹性扩展,首先要实现性能监控模块,对池中的投运的虚拟机进行性能监控,根据监控数据,实时的cpu利用率计算整体运行负载,然后按策略进行调度。下面我讲详细的讲解弹性扩展算法。

  三、 弹性扩展算法

  假设前提:

  闲置池:freePool={V1,V2,……}

  投运池:usedPool={…}

  池中虚拟机:V1,V2,……

  物理机:P1,P2,……,Pn

  按照物理机性能设置每个物理机权值:LD1,LD2,……,LDn

  平均化计算周期:T

  High load limit:HLL

  Lower load limit:LLL

  弹性计算资源调度周期:T1

  算法描述:

  1、 平均法去掉瞬时尖峰值计算所有物理机,以及虚拟机某段时长的平均cpu利用率;

  注:平均法要防止因为瞬时峰值引起云计算内部频繁调度,导致云计算内部的“颤动”

  计算方式如下:每个资源(物理机或者虚拟机)拥有一个队列,保存T周期的m个性能数据,每次新的监控数据cpu利用率进入后,将最久的监控数据移出,将新数据加入到队列里,计算队列中剩余值,计算公式如下:资源负载=(SUMi-1+DATAnew-DATAlast)/m;

  注:如果队列中没有保存一个T周期的数据不做计算,不列入本次计算范围内。

  2、 计算所有投运虚拟机的实际占有负载:

  计算方式:虚拟机的性能监控数据代表的相对计算能力,因此需要通过物理机性能数据折算成绝对的负载值,计算公式如下:

  其中Vcpu表示虚拟创建时cpu个数;

  表示虚拟机相对负载;

  该计算公式表示该物理机上运行m个虚拟机

  3、 选择一个需要调度的pool,综合虚拟机负载计算整个投运的所用虚拟机平均负载:

  其计算公式如下:

  m表示该pool中已投运的虚拟机个数。

  4、 计算该pool中是否需要投运或者停运:

  n Pool整体负载〉HLL,表示需要投运新的虚拟机,从free pool中选择Step start count个虚拟加入到待启动队列中,如果free pool中虚拟机个数不足,则将剩余的全部取出。

  n Pool整体负载

  如果Pool中虚拟机个数-Step stop count>=Pool min size,则从used pool中选择Step stop count个负载最低的虚拟机加入到待停止队列中;

  如果Pool中虚拟机个数-Step stop count

  n 否则:该虚拟机不做任何调度

  5、 从待启动中依次启动虚拟机或则从待停止队列中依次停止虚拟机,并清除pool中所有虚拟机T1周期的数据,防止该pool在T1周期不被再次调度。

  6、 依次从poollist取一个pool,按照3-5进行操作。

  算法其他说明:

  该算法只关注对于pool需要启动多少个虚拟机,在理论上虚拟机多少代表其应用在IaaS上占有的计算能力,从而改善应用性能,并使应用按需被分配资源。但实际资源分配还包含了很多因素,例如物理机资源群还剩余多少计算资源,资源利用是否被均分到各个物理机上(这个需要资源均衡的智能迁移进行支撑)。

阅读(1191) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~