2. 西北工业大学 自动化学院, 陕西 西安 710072;
3. 陕西青年职业学院 数字信息技术系, 陕西 西安 710068
伴随着网格计算(grid computing)、面向服务(service-oriented)及虚拟化(virtualization)等技术的发展与进步,云计算在理论及技术上得到了强有力的支持和推进,逐渐成为人们关注的焦点和未来计算模式的发展趋势。
目前,越来越多的应用服务提供商和中小型企业把应用部署到云平台上,云平台数据中心的数据逐渐增多,需要的服务器也逐渐增多,但是资源利用率不高的现象却普遍存在于云数据中心。如何提高资源利用率、维持系统的负载均衡以及减少能量消耗,已逐渐成为各企业在搭建云平台时重点考虑的问题。本文结合当前流行的开源云平台OpenStack,对OpenStack中的资源调度算法进行了研究,在此基础上提出了基于OpenStack的虚拟机动态调度算法,来维持云平台系统运行过程中的负载均衡,同时减少能量消耗。
1 OpenStack的调度策略分析在基于OpenStack搭建的私有云或者公有云中,往往都支撑着一系列具体服务的运行。平台数据中心负载往往很高,所以需要加入许多物理服务器来组成资源池以满足上层的服务需求。如何分配和使用这些资源,涉及资源调度的问题,在OpenStack构架中scheduler模块负责解决该问题。图 1为OpenStack中Nova compute的结构图。
在Nova中,scheduler的实现机制是:从AMQP(高级消息队列协议)队列中接收一个RPC消息,再根据调度策略将消息转发给其认为最合适的compute节点。Nova调度器支持多种可能的因素来决策,比如compute负载、内存使用率等,在Nova中使用比较多的是FilterScheduler调度器。FilterScheduler调度器的处理大致可以分为2个步骤:过滤(filtering)和权衡(weighting)。据指定的过滤方法(比如在指定的可用区域额内,CPU使用率小于5%,内存使用率小于20%等)对所有的可用计算节点进行过滤,得到满足这一条件的所有计算节点的集合。然后将请求消息中指定的要求与过滤后的所有计算节点的当前特征值进行逐一对比,根据请求和计算节点的匹配度得到相应成本值(costs),将所有成本值相加得到权重值,并按照权重值的大小将计算节点进行排序,最后为要处理的消息选择权重值最小的节点,在此节点上分配虚拟机。
OpenStack采用了快速租用的调度算法来满足虚拟机的初始分配,但是缺乏根据节点实际运行过程中的动态调度策略,比如通过虚拟机的动态迁移来满足系统的负载均衡,因此,OpenStack搭建的云平台在运行一段时间之后,可能出现某些节点的负载过高,提供的服务质量下降,而其他节点可能相对空闲,负载较少,而且长时间工作在低负载的情况下,这样不仅容易造成系统负载不均衡,而且浪费了大量的资源。所以,在OpenStack中需要一个动态的调度算法在运行过程中对资源进行合理调度,来补充原有算法的不足,维持系统的负载均衡。
2 资源动态调度算法如何平衡系统中各节点的负载,实现资源的动态调度,主要涉及以下3个问题:①虚拟机迁移的触发机制,即哪个节点需要进行虚拟机迁移;②源节点中待迁移虚拟机的选取,即这个节点中需要迁移哪些虚拟机;③目的节点的选取[1],即将这些虚拟机迁移到哪些节点上。三者之间关系可以用图 2表示。
2.1 迁移触发策略
从图 3可以看出,随着CPU利用率升高,节点的能耗增加并不大,但是CPU利用率为0%(即空闲节点)的能耗却很高,所以应在保持节点能正常运行的情况下,尽量提高节点的负载,并且将空闲出来的节点关掉,以此来有效减少电能消耗。
定义3 负载均衡度(load balance):用WorkLoadi表示节点i的负载,B表示系统负载均衡度,系统中有n个节点,则B可以用以下公式求得[3]
定义4 节点负载等级(node load level):根据节点负载的大小,将各节点负载分为以下几个等级:
等级 | 负载 | 状态 | 迁移触发 |
1 | WorkLoad≤30% | 清闲 | 触发 |
2 | 30%≤WorkLoad≤70% | 正常工作 | 不触发 |
3 | 70%≤WorkLoad≤80% | 较繁忙 | 不触发 |
4 | WorkLoad>80% | 非常繁忙 | 触发 |
根据对节点负载定义,设定双阈值触发机制:基于节点负载的上线阈值触发迁移和下线阈值触发迁移,如图 4和图 5所示。采用双阈值触发主要是基于两方面的考虑,上线阈值的设定主要是为了避免节点负载过高,无法满足用户需求,或者因负载过高导致节点运行出现故障;下线阈值的设定主要是为了尽量减少运行节点的数量,达到节能的效果。节点的负载信息包括了CPU的利用率、内存的使用率,能更加准确地描述资源的使用情况,单一的CPU利用率或内存利用率无法真实反映资源的使用情况。
实时更新节点负载信息容易出现瞬时低谷或高峰现象,可能节点负载瞬间超出了设定阈值,但是能在短时间内迅速恢复下来。为了避免因瞬间的振荡而错误地迁移,在本文中,引入滑动窗口[4],定义滑动窗口的更新周期为W,W值也表征着窗口大小,是一个连续的时间单元。在该连续时间单元内,将节点负载值按照固定时间间隔进行采样,采用队列形式组织缓冲池来保存采样数据,当下一个更新周期到来时,当前缓冲区插入到队尾,头缓冲区将作为下一个窗口的接收数据。对于上线阈值触发,在窗口内,设定一个最大超出次数Mmax,当节点负载连续超出阈值的次数小于Mmax时,滑动窗口不会触发报警,当节点负载连续超出阈值的次数大于Mmax时,滑动窗口发生报警,利用时间序列预测法[5]的AR模型对节点负载的下一个值进行预测,当预测值仍然超出阈值时,触发迁移,否则,不触发迁移。对于下线阈值触发,在窗口内,同样设定一个最大低于次数Nmax,当节点负载连续低于阈值的次数小于Nmax时,滑动窗口不会触发报警,当节点负载连续低于阈值的次数大于Nmax时,滑动窗口发生报警,利用时间序列预测法的AR模型对节点负载的下一个值进行预测,当预测值仍然低于阈值时,触发迁移,否则,不触发迁移。
2.2 待迁移虚拟机选取策略虚拟机的选取策略就是决定从源节点上选取哪些虚拟机进行迁移。在选取虚拟机前,必须确保该虚拟机实例保存在NFS共享存储中,在此基础上才能实现在线迁移。
首先,进行虚拟机的迁移必须要考虑用户服务质量,而用户服务质量主要取决于服务器CPU使用率,尽量选择CPU使用率高的虚拟机进行迁移,剩下的用户才能享用更多的CPU资源。虚拟机CPU使用率是第一个考虑因素。其次,在选择虚拟机迁移的时候要考虑迁移成本,迁移成本主要由迁移时间决定。虚拟机在线迁移过程中,目的节点会根据共享存储里的待迁移虚拟机文件生成一个虚拟机,然后源节点将待迁移虚拟机的内存向目的节点拷贝,同时记录下内存脏页,内存拷贝结束后,开始拷贝内存脏页,直到大部分的内存同步后,暂停待迁移虚拟机,将该虚拟机未同步的内存及CPU状态同步到目的节点上,之后目的节点上的虚拟机开始运行。因此待迁移虚拟机的内存决定了迁移时间。在迁移过程中虚拟机内存的使用是第二个考虑因素。
定义一个节点上每个虚拟机CPU使用量占该节点CPU总量的百分比为Ci,虚拟机内存使用量占该节点内存总量的百分比为Mi,Ui为CPU使用率和内存使用率的比值,即
通过上面分析,在选取虚拟机时,该虚拟机的Ci越大越好,Mi越小越好,即Ui越大越好。在选取虚拟机前,先将该节点上虚拟机的Ui进行排序,选取Ui最大的虚拟机进行迁移。
2.3 目的节点选取策略在迁移策略中,目的节点的选取尤为重要,它直接影响系统数据中心运行节点的负载均衡情况。如果选取的目的节点不合理,可能导致不必要的迁移,或者二次迁移,从而增加系统运行负担及系统能耗。
经过虚拟机迁移触发以及待迁移虚拟机的选取,将待迁移的虚拟机构成集合V=(V1,V2,…,Vn),选择第二等级的节点构成资源池C=(C1,C2,…,Cn)。本文中用CPU使用率、内存、网络带宽的三维向量<CPU,Mem,Net>来描述虚拟机和目的节点的资源。定义迁移虚拟机i对目的节点j的资源需求向量Dijvm=(dijcpu,dijmem,dijnet),计算公式如下:
显然,Sij在(0,1)内,Sij越大,将该虚拟机迁移至该节点后,该节点的状态越趋近于达到上限。这样的迁移,会导致其他虚拟机的Sij较小而无法找到合适的目的节点,拥有更多资源的节点却无法接收到迁移的虚拟机,无法满足负载均衡。在此,定义虚拟机i对节点j的匹配度Mij
同样,Mij也在(0,1)内,Mij越大,虚拟机i对该节点j的需求越高,虚拟机迁移到该节点的可能性越大,虚拟机i和节点j的匹配度越高。
资源多、性能好的节点能匹配到相对多的虚拟机,此时就容易引起群聚效应,为避免群聚效应的发生,采用概率轮盘来进行目的节点的选择。
定义虚拟机i最终选择目的节点j的概率为Pij
虚拟机i可以根据选择节点j的概率制定概率轮盘,如图 6所示。
每个迁移的虚拟机都有1个选择概率轮盘。在实现过程中,可以通过1个(0,1)的随机数字来判断所在的区间,实现虚拟机目的节点的选取。
由图 6可知,资源越多、性能越好的节点在轮盘上占用的空间越大,指针最后指向该区域的可能性也就越大,从而该节点被选为目的节点的概率较大。而资源少的节点在轮盘上占用的空间少,被选为目的节点的概率也就小。这样,很大程度上改善了系统负载均衡,也在一定程度上减少了群聚效应的发生。
3 实验仿真为验证本文提出的虚拟机动态迁移算法的性能,本文采用云计算仿真软件CloudSim[6]进行仿真验证。在实验中,配置了100个节点,为了更加真实模拟云平台中资源的异构性,将这100个节点分成4组,每组25个节点,组内节点的配置相同,不同组间的配置不同,具体配置情况如表 2所示。
为所有节点提供300台虚拟机,每台虚拟机的CPU在100~200 MIP中随机产生,内存在1~2 G中随机产生,带宽在5~10 Mbps中随机产生。将这300台虚拟机随机安置在这100个节点上,对500个相互独立的任务集进行处理,每个任务长度在150 000~200 000中随机产生。
在节点负载公式(2)中,设置w1=w2=0.5,监控节点负载,如有触发迁移,则动态地进行虚拟机迁移。每隔100 s统计1次节点的资源利用情况和节点的负载及系统的负载均衡度。双阈值触发动态迁移策略与无迁移策略、上线触发动态迁移策略及下线触发动态迁移策略的实验对比如图 7所示。
由于各节点分配的任务不同,各节点的负载也不同,迁移次数随系统运行时间的增加而增加,传统的无迁移策略的负载均衡度值要明显高于有迁移策略的负载均衡度值。负载均衡度值越大,系统负载越不均衡。上线触发策略和下线触发策略的值要高于双阈值迁移策略,说明减少低负载节点使用和高负载节点资源使用能有效改善系统的负载均衡。
节点能量消耗主要与CPU使用率有关,假设每个节点的CPU使用率为0%时,消耗电能175 W,CPU使用率为100%时,消耗电能250 W,忽略迁移过程中电能消耗,分别对无迁移策略、上线触发动态迁移发策略、下线触发动态迁移策略及双阈值动态迁移触发策略的系统仿真大约20 min,结果对比如图 8所示。
由图 8看出,下线触发策略和双阈值触发策略消耗的电能要明显低于无迁移策略和上线触发策略;所以,减少低负载节点的使用和关闭空闲节点能很好地起到节能效果。同时,上线触发策略消耗的电能低于无迁移策略,说明平衡各节点的资源使用率也能达到一定的节能效果。
4 结 论本文针对云平台中资源调度问题,结合开源云OpenStack,给出了在OpenStack下进行虚拟机动态调度算法的具体设计。算法主要解决了虚拟机动态调度过程中迁移的触发问题,源节点中待迁移虚拟机的选择问题以及目的节点的选择问题。最后结合云计算仿真平台CloudSim对算法工作的情况进行模拟,验证了算法的调度质量。
[1] |
孙海生, 张海酉, 刘志涛. 大迎角非定常气动力建模方法研究[J]. 空气动力学学报, 2012, 29(6): 733-737 Sun Haisheng, Zhang Haiyou, Liu Zhitao. Comparative Evaluation of Unsteady Aerodynamics Modeling Approaches at High Angle of Attack[J]. Journal of Aerodynamics, 2012, 29(6): 733-737 (in Chinese) |
Cited By in Cnki (5) | |
[2] | Wang Z, Lan C E, Brandon J M. Fuzzy Logic Modeling of Nonlinear Unsteady Aerodynamics[R]. AIAA-1998-4351 |
[3] |
尹江辉, 刘昶. 非定常气动力辨识的模糊逻辑方法[J]. 南京航空航天大学学报, 2000, 32(5): 545-550 Yin Jianghui, Liu Chang. Fuzzy Logic Technique of Unsteady Aerodynamic Identification [J]. Journal of Nanjing University of Aeronautics & Astronnautics, 2000, 32(5): 545-550 (in Chinese) |
Cited By in Cnki (10) | |
[4] |
孔轶男, 王立新, 何开锋, 等. 过失速机动的模糊逻辑建模仿真[J]. 北京航空航天大学学报, 2007, 33(10): 1174-1177 Kong Yinan, Wang Lixin, He Kaifeng, et al. Fuzzy Logic Models for Unsteady Post Stall Maneuver[J]. Journal of Beijing University of Aeronautics and Astronautics, 2007, 33(10): 1174-1177 (in Chinese) |
Cited By in Cnki (1) | |
[5] | Snell S A, Nns D F, Arrard W L. Nonlinear Inversion Flight Control for a Supermaneuverable Aircraft[J]. Journal of Guidance, Control, and Dynamics, 1992, 15(4): 976-984 |
Click to display the text | |
[6] |
张力, 王立新. 推力矢量飞机控制律设计及过失速机动仿真研究[J]. 飞行力学, 2008, 26(4): 1-3 Zhang Li, Wang Lixin. Research on Flight Control Law Design of Fighter with Vectoring Thrust and Post-Stall Maneuver Simulation[J]. Flight Dynamics, 2008, 26(4): 1-3 (in Chinese) |
Cited By in Cnki (4) | |
[7] |
谢蓉, 王新民, 李俨. 超机动飞机动态逆-PID 控制器设计[J]. 飞行力学, 2009, 27(2): 67-71 Xie Rong, Wang Xinmin, Li Yan. Dynamic Inversion-PID Controller of a Supermaneuverable Aircraft [J]. Flight Dynamics, 2009, 27(2): 67-71 (in Chinese) |
Cited By in Cnki (18) | |
[8] |
史静平, 章卫国. 基于AMS结构分析的串接链可达集求解与优化设计[J]. 西北工业大学学报, 2012, 30(4): 582-588 Shi Jingping, Zhang Weiguo. An Efficient Optimization Method of Daisy Chain Control Allocation Based on Genetic Algorithm[J]. Journal of Northwestern Polytechnical University, 2012, 30(4): 582-588(in Chinese) |
Cited By in Cnki (3) |
2. School of Automation, Northwestern PolytechnicalUniversity Xi'an, 710072, China;
3. Digtal Informetion Technlogy Department, Shanxi Yacnth Vocation, Coltege, Xi'an, 710068, China