舒晓苓,吴雪琴
(电子科技大学成都学院,四川 成都 611731)
随着互联网、物联网以及虚拟现实等技术的兴起,云计算需求量剧增[1]。同时,云客户对云服务质量的要求越来越严格,特别是线上交易与海量数据交互对服务质量要求较高。为了提升客户体验效果,虚拟机资源调度方式备受人们关注。资源调度[2]是指在云环境的基础上,分析若干个客户的多资源需求与云系统的可利用资源,使资源能够及时传输到客户匹配虚拟机上,并确定虚拟机资源协调的顺序。云环境下虚拟机资源协调问题是多资源、多种类型的极难问题,在研究过程中会面临诸多的挑战[3]。其中,最主要挑战就是负载,因为云环境中不同资源性能均不同,实时负载存在较大差异,资源协调极难做到公平、有效。
为此,诸多研究人员对云虚拟机负载均衡进行积极研究。有学者将改进粒子群算法应用在云计算的任务调度中,采用粒子群与鸡群融合算法,将粒子的分布根据鸡群种类进行区分,并改进粒子的学习因子,有效协调虚拟机的负载,但该过程使用算法较为复杂,增加负载协调的时间;除此之外,罗斯宁等人[4]面对虚拟机负载协调使用时间较长的问题,根据目标函数构建任务匹配模型,并利用改进蚁群算法协调任务匹配时负载的问题,该方法为了缩短负载协调时间,简化计算流程,但是负载均衡效果和收敛性不佳。
为了解决虚拟机负载协调效率低、负载均衡效果和收敛性不佳的问题,本文采用逻辑分区方式将硬件资源进行分区划分,可以增强资源的利用效率与灵活性能,并使用遗传算法完成各分区虚拟机资源负载均衡优化,该流程能够自适应调节虚拟机负载,缩短虚拟机协调延迟时长,满足客户的实时使用需求。
云是由K个计算设备资源构成[5],含有CPU、内存以及存储器材等。这些器材资源都是通过虚拟机向客户传输的,云系统能够实时支持若干个虚拟机同时调度。
由于逻辑分区可以将物理服务设备的硬件资源进行分割,得出两个或者两个以上单个服务器,也就是分区。各个分区上均有各自单独使用的处理设备、内存以及硬盘等[6],同时任意一个分区运行不会干扰其他分区运行,进而增加资源的使用效率与灵活性。为此,采用逻辑分区方式将虚拟机分割成V个分区,各分区虚拟机均对应特定个数的资源,也就是运行客户单位时间内能够利用的最多资源。设定K=(1,2,…,k)代表资源种类;V={1,2,…,V}代表虚拟机分区的空间;Rvk代表第v种类虚拟机需要的第k种类资源的个数;Ck代表第k种类资源系统容量。而系统能够支持v种类虚拟机的条件为:
Rvk≤Ck,∀k∈K
(1)
根据公式(1)可将虚拟机配置设定如下:
设定一:假设1个系统能够同时调度N1个种类-1的虚拟机实例、N2个类型-2的虚拟机实例,Nv个类型-v的虚拟机实例,则V分区元素向量[7]N=(N1,N2,…,Nv)是云系统的1个可行的虚拟机配置,整个流程如公式(2)所示。
(2)
需要考虑以下业务形式:虚拟机的发出请求随机地送达系统,不同分区的虚拟机请求送达速率均不同且互相独立;对各分区虚拟机送出请求的数量不同且服务相互独立,并具有相同分布形式(i.i.d分布),任意一个请求的虚拟机运行时间也需要服从i.i.d分布形式。
若来源于终端客户的请求,需要明确所请求是哪个分区的虚拟机与运营时间t(以时隙为单位)。一个虚拟机任务被称为第v′种类任务,则此任务就需要请求第v种类的虚拟机。任务长度为S,则代表此虚拟机请求运营S时隙。为了降低计算难度,只需考虑未占用时隙系统,是指任意任务被调度开始到调度结果使用时长为一个时隙的系统。从各时隙起始阶段,虚拟机调度设备经过调度方案确定此时隙,并调度符合要求分区的虚拟机与各分区虚拟机调度几个虚拟机设备共同执行任务。
(3)
其中,E表示常数。
(4)
(5)
设定Qv(t)代表t时间点,系统等待的第v种类虚拟请求的个数,即:
(6)
设定Wv(t)代表t时间点,系统等待的第v种类虚拟机请求的工作量,即:
(7)
(8)
(9)
则最小优化为:
(10)
约束条件为:
Nv(t)≤Wv(t),∀v∈V
(11)
为了缩短公式(10)-(11)优化问题的计算时间,则用虚拟机配置组数[9]NAt×v=(N(at,v))At×v来代表调度方案的集合,设定如下:
设定二:当行向量Nat=(N(at,v))1×v,at=1,2,…,At表示时间点t的可行虚拟机配置时,N(at,v)被认为是时间点t的虚拟机配置数组,且Nat=(N(at,v))1×v=(N(at,1),N(at,2),…,N(at,V))需要符合如下约束条件:
(12)
在加入虚拟机配置数值后,目标优化问题变换成一个判断问题,也就是选取at∈{1,…At},t=0,…,∞最佳数值,使平均任务在最短时间内完成。
同时,通过公式(13)能够获得在t时隙调度结束的-v种类虚拟机个数为:
(13)
在t时间的-v种类虚拟机的平均任务结束所使用时长为:
(14)
根据公式(14)可知,E[Tv(t)]为Nv(τ)(τ=0,…,t-1)的函数。
设定g({Nat})为序列Nat,t=0,…,∞的函数,代表全部分区的虚拟机完成平均任务所使用时间,则优化问题可以变换成最小化,即:
(15)
约束条件:
Nat⊂NAt×v,t=0,…,∞,at∈{1,A}
(16)
通过对虚拟机负载分析得出任务形式与优化目标,并采用遗传算法对虚拟机资源协调进行优化,达到虚拟机负载均衡优化的目的。
2.4.1 染色体的编码与解码
利用整数编码方法对染色体进行编码,设定n表示染色体长度,1个基因表示1个任务,基因数值表示执行此任务的虚拟机编号。
若m=6,n=20,则表示6个虚拟机,20个不同任务,生成以下长度为20的染色体,即
p0=[2,3,1,4,1,6,1,2,5,3,1,4,2,6,1,6,5,3,5,5]
(17)
对染色体进行解码,获得6组虚拟机编码的任务队列,解码过程如下:
v1:{3,5,7,11,15};x1,3=x1,5=x1,7=x1,11=x1,15=1
v2:{1,8,13};x2,1=x2,8=x2,13=1
v3:{2,10,18};x3,2=x3,10=x3,18=1
v4:{4,12};x4,4=x4,12=1
v5:{9,17,19,20};x5,9=x5,17=x5,19=x5,20=1
v6:{6,14,16};x6,6=x6,14=x6,16=1
(18)
2.4.2 初始种群的生成
种群规模的选择对遗传算法的收敛性具有较大影响,太大与太小均会影响算法的准确性。为此,种群规模通常在20-150范围内。设定种群规模为SIZE,根据系统任意生成SIZE个染色体,基因数值为[1,m]区间内任意数值。
2.4.3 遗传操纵
1)个体选取
个体选取是从种群中筛选适用度[10]最佳染色体进行复制,形成新的种群。其中,个体i被选中的几率为:
(19)
利用轮盘赌的筛选方法,得出个体i的累计概率,即:
(20)
2)交叉操作
交叉操作生物领域有性繁殖的基因重建流程,与染色体的交叉重建等同,进而产生具备极佳优良基因的染色体,交叉几率通常在0.4-0.99范围内。使用顺序交叉方式进行交叉操作,得出2个父代个体,即p1和p2。
在父代个体p1根据顺序编码找出tp2中每个基因数值,同时向前移动,使得找出基因顺序与tp2等同,以此获得新的个体,即np1=[1,1,6,2,2,3,5,5,3,4,5,4,3,1,5,6,6,5,3,3]。与此同时,将父代个体p2与交叉因子串tp1做相同的操作,获得np2=[2,3,5,5,3,1,1,6,2,4,2,1,6,4,3,3,2,4,4,4]。
3)变异操作
变异操作是指编码受到小概率干扰而发生变化,等同于基因突变。变异概率通常在0.0001-0.1范围内。利用整数变异,也就是任意取点,并利用基因(排除已选取基因)的数值整数来代替此基因,此基因整数取值为[1,m]。例如,将父代个体p1做变异操作,假设任意投点到第8个基因上,则此点基因数值为1,在[1,6]区间内任意取除了1以外的数值;若任意取数值为2,则p1变异后获得新个体为np1=[2,3,5,5,3,4,5,2,4,1,3,2,6,1,5,6,6,5,3,3]。
为确保算法的空间查找能力,并提升算法的收敛性能,将自适应变异方法引入,使个体增添1个变异概率属性:pmk代表个体k的变异概率,若目前最佳个体的适应度是fbest,则个体k的适应度f(k)为:
pm′k=exp(-α×(|fbest-f(k)|/fbest))×pmk(α∈R+)
(21)
通过公式(21)完成自适应协调的变异概率,并能根据客户任务的需求动态协调资源,使虚拟机负载均衡得到优化。
实验根据现实设备的运行负载记录数据来检测本文算法的优劣。实验选用Intel(R)Pentium(R)处理设备,内存16GB,操作系统为Windows 10,并将基于改进粒子群算法的云计算任务调度方法和基于改进蚁群算法的云计算用户任务调度算法作为对比方法,分析三种方法得出的负载均衡效果、负载协调时长与收敛性能。
实验选取800条任务记录,在三种算法最佳的状况下进行对比,对比结果如图1所示。
图1 负载均衡效果对比
从图1可知,随着任务数量的增多,三种方法的负载均衡均呈上升趋势,而本文算法上升坡度均高于传统方法,因为本文算法使用逻辑分区方式将硬件资源进行合理划分,并且各分区虚拟机能够同时调度多个虚拟机设备共同执行任务,增强虚拟机负载均衡能力,为此,本文算法优于传统方法。
相同任务不同算法的虚拟机资源负载协调时长也是不同的。下面从负载协调时长进一步证实本文算法的虚拟机负载均衡性能。图2为等待时长对比结果。
图2 等待时长对比情况
从图2中看出,随着任务数量增多,任务协调时间逐渐增加,基于改进粒子群算法的云计算任务调度方法的任务协调耗时最长,该方法不能根据虚拟机配置数值将虚拟机资源调度问题转换成单维的虚拟机调度决策问题,增加任务协调时间;而本文算法的等待时长最短,整体上看本文算法优于传统方法。
为了证实本文算法的收敛性能,实验选择100次迭代次数,并将本文算法与传统方法进行对比,对比结果如图3所示。
图3 收敛性对比结果
从图3可以看出,基于改进粒子群算法的云计算任务调度方法随着任务数量的增多,迭代次数基本不变,表明该方法不能在实验设置最大迭代次数内收敛,其收敛性较差;基于改进蚁群算法的云计算用户任务调度算法迭代次数高于本文算法迭代次数,这是因为本文算法使用自适应变异方法,能够提升空间查找能力,进而提升算法的收敛性能,因此,本文算法收敛性较好。
传统虚拟机负载均衡任务调度是直接将任务调度在主机资源上,这种方式满足不了客户任务对云资源的动态需求。为此本文提出基于逻辑分区的云虚拟机负载均衡优化算法。此算法在响应时长与负载均衡效果、收敛性均取得一定成果,但由于对课题研究时间有限,今后可以在成本、吞吐量、稳定性等方面深入研究。