一种实例弹性伸缩方法、实例管理模块以及计算设备
技术领域
本发明涉及虚拟化领域,尤其涉及一种实例弹性伸缩方法、实例管理模块以及计算设备。
背景技术
虚拟化(英文:virtualization)是一种资源管理技术,通过将计算机的各种实体资源,如计算资源、存储资源、网络资源或其它物理资源予以抽象、转换后进行呈现,以打破实体结构间的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源。
虚拟化实例(为了便于描述,本发明以下简称“实例”)指的是将实体资源经过虚拟化后形成的独立的、可执行计算存储或网络通讯功能的虚拟个体,具体可以表现为虚拟机、容器、或其它形式。其中,虚拟化系统(为了便于描述,本发明以下简称“系统”)为实例分配中央处理器(英文:central processing unit,缩写:CPU)、内存、带宽等资源,使得实例能够独立的应对实际业务。
现阶段在虚拟化实例的基础上提出了一种弹性伸缩(英文:auto scaling)技术,该技术将多个执行同样应用、具有同样功能的实例组成一个伸缩组(英文:scalinggroup)。伸缩组中的实例的个数是可以弹性伸缩的,例如,若伸缩组中的实例的负载过大,则可以增加伸缩组中实例的个数(即伸缩组“伸长”),以分担伸缩组中每个实例的负载;若伸缩组中的实例的负载较低,则可以删除部分实例(即伸缩组“缩短”),以节约系统的资源。
现阶段的技术中,为了保证系统的稳定性,系统一般会控制伸缩组缓慢的伸长或缩短。但是在很多实际的应用场景中,系统的业务量有可能在短时间内发生巨变。在这种场景下,伸缩组若仍然缓慢的伸缩,则显然无法应对猛增的业务量,不能满足实际应用需求。而若加快实例变化的速度,又无法保证系统的稳定性。
发明内容
本发明提供了一种实例弹性伸缩方法,用于保证虚拟化系统的稳定性,提升虚拟化系统应对业务突发等极端场景的能力。
本发明第一方面提供了一种实例弹性伸缩方法,适用于虚拟化系统。其中,虚拟化系统中包括一个或多个实例组成的伸缩组。虚拟化系统判断该伸缩组中的实例的负载状态是否超过第一上限值,若超过则创建单调递增时间窗。单调递增时间窗是预设的一段时间段,在单调递增时间窗内,伸缩组中的实例的个数可以增加也可以不变,但是不能减少。在单调递增时间窗内,系统判断伸缩组中实例当前的负载状态是否超过第二上限值,若判断结果为是,则在伸缩组中新增n个实例。其中,衡量伸缩组中实例的负载状态的参数有很多,具体可以为CPU使用率、或内存占用率、或磁盘的每秒的输入输出(英文:input/output persecond,缩写:IOPS)、或网络带宽、或磁盘占用率中的一个或几个,也可以为其它参数。由于在单调递增时间窗内伸缩组中实例的个数只能单向变化,故在该单调递增时间窗内系统只需要考虑分配资源即可,不会出现分配后又立刻回收资源的情况,这样就避免了系统的震荡,能够在一定的程度上保证系统的稳定性。在系统稳定性得到保障的基础上,系统的实例个数就可以快速增加。这样就能够兼顾系统稳定性与伸缩组的伸缩速率,能够应对业务出现猛增的应用场景。
可选的,若在单调递增时间窗内系统确定伸缩组中实例的负载状态没有超过第二上限值,则可以保持伸缩组中实例的个数不变,也可以执行其它操作,但不会减少伸缩组中实例的个数。
可选的,系统可以在确定伸缩组中实例的负载状态超过第一上限值后,批量拷贝m个实例的镜像文件,以部署m个实例,其中m为不小于n的整数。这样在单调递增时间窗内,若系统确定伸缩组中实例的负载状态超过第二上限值,只需要在已部署的m个实例中启动n个即可。由于在启动实例之前已经批量的完成了实例的部署,因此启动实例花费的时间很短,能够快速的增加实例的个数。
可选的,在单调递增时间窗内,系统可以每隔预置周期,执行判断伸缩组中实例的负载状态是否超过第二上限值,若判断结果为是则在伸缩组中新增n个实例的步骤,这样在一个单调递增时间窗内,系统可以多次增加n个实例。
可选的,在单调递增时间窗结束时,已部署的m个实例中可能只启动了m-p个,还有p个实例未启动,其中p为小于m的整数。若此时伸缩组中实例的负载不超过第一上限值,则系统回收该p个未启动的实例。若伸缩组中实例的负载仍然超过第一上限值,则系统再次创建单调递增时间窗,但是仅需要再部署m-p个实例,使得未启动的实例个数为m即可。
可选的,若已部署的m个实例已经全部启动,但是单调递增时间窗还未结束,且伸缩组中实例的负载仍然超过第二上限值,则说明当前的伸缩组仍然超载。此时系统再次批量部署新的实例,具体部署的个数可以为m个,也可以为其它数值。
可选的,虚拟化系统还可以判断该伸缩组中的实例的负载状态是否低于第一下限值,若低于则创建单调递减时间窗。单调递减时间窗是预设的一段时间段,在单调递减时间窗内,伸缩组中的实例的个数可以减少也可以不变,但是不能增加。在单调递减时间窗内,系统判断伸缩组中实例当前的负载状态是否低于第二下限值,若判断结果为是,则在伸缩组中删除j个实例。由于在单调递减时间窗内伸缩组中实例的个数只能单向变化,故在该单调递减时间窗内系统只需要考虑回收资源即可,不会出现回收后又立刻分配资源的情况,这样就避免了系统的震荡,能够在一定的程度上保证系统的稳定性。在系统稳定性得到保障的基础上,系统的实例个数就可以快速减少。
可选的,若在单调递减时间窗内系统确定伸缩组中实例的负载状态没有低于第二下限值,则可以保持伸缩组中实例的个数不变,也可以执行其它操作,但不会增加伸缩组中实例的个数。
可选的,系统可以在确定伸缩组中实例的负载状态低于第一下限值后,批量停止i个实例,其中i为不小于j的整数。这样在单调递减时间窗内,若系统确定伸缩组中实例的负载状态低于第二下限值,只需要在已停止的实例中删除j个实例,即删除j个实例的镜像文件即可。假设在单调递减时间窗结束时还有q个实例的镜像文件未被删除,且接下来的时间窗为单调递增时间窗,则实例管理模块只需要部署m-q个实例即可。这样就节约了部署实例的任务量和时间,有利于提升系统的效率。其中q为小于i的整数。
可选的,在单调递减时间窗内,系统每隔预设周期,执行判断伸缩组中实例的负载状态是否低于第二下限值的步骤,其中,预设周期的长度小于所述单调递减时间窗的长度;
可选的,当单调递减时间窗结束时,若已停止的i个实例中还有q个实例的镜像文件未删除,且伸缩组中实例的负载状态仍然低于第一下限值,则系统再次创建单调递减时间窗,并在伸缩组中停止i-q个实例,其中q为小于i的整数。
本发明第二方面提供了一种实例管理模块,适用于虚拟化系统。该实例管理模块具体包括:负载判断单元,用于判断伸缩组中实例的负载状态是否超过第一上限值。负载判断单元,用于判断伸缩组中实例的负载状态是否超过第一上限值。时间管理单元,用于在负载判断单元确定伸缩组中实例的负载状态超过第一上限值时,创建单调递增时间窗。其中,伸缩组中实例的个数在该单调递增时间窗内不减少。负载判断单元还用于:在单调递增时间窗内,判断伸缩组中虚拟化实例的负载状态是否超过第二上限值。实例伸缩单元还用于在负载判断单元确定伸缩组中化实例的负载状态超过第二上限值时,在伸缩组中新增n个虚拟化实例,其中n为不小于1的整数。
可选的,实例伸缩单元还用于在负载判断单元确定伸缩组中实例的负载状态超过第一上限值时,在系统中拷贝m个实例的镜像文件,以实现m个实例的部署。其中m为不小于n的整数。这样在负载判断单元确定伸缩组实例的负载超过第二上限值时,实例伸缩单元只需要在已部署的m个实例中,启动n个实例即可。
可选的,负载判断单元在单调递增时间窗内,可以每隔预置周期,执行判断伸缩组中实例的负载状态是否超过第二上限值的步骤,其中预置周期的长度小于单调递增时间窗的长度。当单调递增时间窗结束时,若已部署的m个实例中还有p个未启动,且伸缩组中实例的负载状态仍然超过第一上限值,则时间管理单元再次执行创建单调递增时间窗的步骤,且实例伸缩单元在系统中再次部署m-p个实例。其中p为小于m的整数。
可选的,在单调递增时间窗内,若已部署的m个实例已经全部启动,且伸缩组中实例的状态仍然超过第二上限值,则实例伸缩单元在系统中再次部署新的实例。
可选的,负载判断单元还用于:判断伸缩组中实例的负载状态是否低于第一下限值。时间管理单元还用于在负载判断单元确定实例的负载状态低于第一下限值时,设置单调递减时间窗。其中,伸缩组中实例的个数在单调递减时间窗内不增加。负载判断单元还用于在单调递减时间窗内,判断伸缩组中实例的负载状态是否低于第二下限值。实例伸缩单元还用于在负载判断单元确定伸缩组中实例的负载状态低于第二下限值时,在伸缩组中删除j个实例。其中j为不小于1的整数。
可选的,实例伸缩单元还用于在负载判断单元确定伸缩组中实例的负载状态低于第一下限值时,在伸缩组中停止i个实例,其中i为不小于j的整数。实例伸缩单元还用于在负载判断单元确定伸缩组中实例的负载状态低于第二下限值时,在已停止的i个实例中,删除j个实例的镜像文件。
本发明的第三方面提供了一种计算设备,包括处理器、存储器、通信接口以及总线。其中,处理器、存储器和通信接口可以通过总线实现彼此之间的通信连接,也可以通过无线传输等其他手段实现通信。计算设备在运行时,处理器用于执行本发明第一方面提供的实例弹性伸缩方法。
附图说明
图1(a)为本发明提供的虚拟化系统的一个软件架构图;
图1(b)为本发明提供的实例弹性伸缩方法一个实施例流程图;
图2为本发明提供的实例管理模块一个实施例结构图;
图3为本发明提供的计算设备一个实施例结构图。
具体实施方式
本发明提供了一种实例弹性伸缩方法,用于保证虚拟化系统的稳定性,提升虚拟化系统应对业务突发等极端场景的能力。本发明还提供了相关的实例管理模块以及计算设备,以下将分配进行描述。
弹性伸缩是虚拟化系统中的重要技术。表1给出了现阶段的弹性伸缩技术的一组经典的参数配置。其中,系统在每个指标采集周期300s内,采集该指标采集周期内伸缩组中实例的平均CPU使用率。若平均CPU使用率超过上限80%,则触发在伸缩组内增加一个实例。若平均CPU使用率低于下限40%,则触发在伸缩组内减少一个实例。其中,伸缩组的实例个数保持在在[1,10]个之内。
参数 |
值 |
最小实例数 |
1 |
最大实例数 |
10 |
伸缩冷却时间 |
360秒 |
触发指标 |
平均CPU使用率 |
指标采集周期 |
300秒 |
持续时间 |
3个指标采集周期 |
上限 |
80% |
上限触发动作 |
+1实例 |
下限 |
40% |
下限触发动作 |
-1实例 |
表1
在此特地强调表1中的“伸缩冷却时间”和“持续时间”这两个参数。虚拟化实例在创建时,需要系统额外分配计算、存储以及网络等资源。因此每增加或减少一个实例,都会对系统造成一定的冲击。若实例频繁的增减,则系统需要不断的分配、回收资源,导致系统反复震荡,稳定性得不到保障。为了维护系统的稳定性,就需要控制伸缩组中的实例个数缓慢变化。“伸缩冷却时间”和“持续时间”正是为了保证实例个数缓慢变化而设置的参数。具体的,只有在持续时间(即3个指标采集周期)内,伸缩组中实例的平均CPU使用率均达到上限才会触发+1实例的动作,或只有在持续时间内伸缩组中实例的平均CPU使用率均低于下限才会触发-1实例的动作,且在伸缩组进行一次伸缩后,经过伸缩冷却时间360秒才能再进行下一次伸缩。这样就能够避免伸缩组内的实例频繁的增减。此外,上限和下限触发的实例个数的变化仅为1个,也是出于系统的稳定性的考虑。
但是现阶段的技术为了保证系统的稳定性,大大缩减了伸缩组的伸缩速度。而在很多实际的应用场景中,业务量有可能在短时间内发生巨变。例如,由于上班族上班时刻的一致性,网络的数据流量在上午9点后会发生猛增;由于双11活动的特殊性,阿里的服务器在11月11日零点后业务量会发生猛增。在这种场景下,伸缩组若仍然缓慢的伸缩,则显然无法应对猛增的业务量,不能满足实际应用需求。而若为了加快实例变化的速度,将伸缩冷却时间、持续时间等参数设置的较小,又无法保证系统的稳定性。
为了解决上述问题,本发明对现有的弹性伸缩技术进行了改进。首先,本发明中虚拟化系统的软件架构请参阅图1(a),其中,监控告警模块用于获取系统中各实例的性能数据。资源分配模块用于为实例分配CPU、内存、带宽等资源,将多个实例组成伸缩组,并管理伸缩组中实例的生命周期。实例的增、删、改、查的功能也由资源分配模块实现。而本发明提供的弹性伸缩技术则由实例管理模块来实现。实例管理模块具体用于根据监控告警模块的信息确定实例的增删,并向资源分配模块发送对应的实例增删请求。
在图1(a)所示的软件架构的基础上,本发明提供了一种实例弹性伸缩方法,适用于虚拟化系统中的实例管理模块,其基本流程请参阅图1(b),包括:
101、判断伸缩组中实例的负载状态是否超过第一上限值。
实例管理模块判断伸缩组中实例的负载状态是否超过第一上限值,其中,衡量伸缩组中实例的负载状态的参数有很多,具体可以为CPU使用率、或内存占用率、或磁盘的IOPS、或网络带宽、或磁盘占用率中的一个或几个,也可以为其它参数,此处不做限定。伸缩组中实例的负载具体可以为伸缩组中实例的平均负载状态,也可以为伸缩组中某个或某几个特定的实例的负载状态,也可以通过其它方式衡量伸缩组中实例的负载状态,此处不做限定。以CPU使用率为例:第一上限值可以设置为“CPU使用率80%”,若伸缩组中实例的平均CPU使用率超过80%,则认为伸缩组中实例的负载状态超过第一上限值。第一上限值可以由人为设定,也可以由实例管理模块自行设定,也可以通过其它方法确定,此处不做限制。
实例管理模块可以从系统的日志信息、告警信息或其它地方获取实例的负载状态信息,并与第一上限值比较,得到实例的负载状态是否超过第一上限值的判断结果。若确定伸缩组中实例当前的负载状态超过第一上限值,则执行步骤102。
102、创建单调递增时间窗。
若伸缩组中实例的负载状态超过第一上限值,则可以认为伸缩组中各实例当前处于超载状态,实例管理模块创建单调递增时间窗。单调递增时间窗是实例管理模块预设的一段时间段。“单调递增”顾名思义,指的是在单调递增时间窗内,伸缩组中的实例的个数可以增加也可以不变,但是不能减少。
单调递增时间窗可以是从当前时刻起始,也可以是从其它的时刻起始,此处不做限定。单调递增时间窗的持续时长可以人为设定,也可以由实例管理模块自行设定,此处不做限定。
设置好了单调递增时间窗后,实例管理模块在单调递增时间窗内,执行步骤103和104。
103、判断伸缩组中实例的负载状态是否超过第二上限值。
实例管理模块判断伸缩组中实例当前的负载状态是否超过第二上限值。与第一上限值类似的,第二上限值也可以为CPU使用率、或内存占用率、或磁盘的IOPS、或网络带宽、或磁盘占用率中的一个或几个参数,也可以为其它参数。实例管理模块可以将伸缩组中实例当前的负载状态信息与第二上限值比较,得到系统当前的负载状态是否超过第二上限值的判断结果。
其中,本发明中采用的“第一”“第二”等术语来描述上限值等技术特征,但这些术语仅用于将不同的上限值等特征彼此区分开,并不应造成额外的限定。例如,本发明中第一上限值也可以被称为第二上限值,同样的,第二上限值也可以被称为第一上限值。第一上限值与第二上限值可以相同也可以不同。
此外,步骤101与步骤103中衡量伸缩组中实例的负载状态可以使用相同的参数也可以使用不同的参数,例如步骤101提到的伸缩组中实例的负载状态可以是伸缩组各实例的平均CPU使用率,步骤103提到的伸缩组中实例的负载状态可以是伸缩组各实例的平均内存占用率。
若确定伸缩组中实例当前的负载状态超过第二上限值,则执行步骤104。
104、新增n个实例。
若伸缩组中实例当前的负载状态超过第二上限值,则认为伸缩组中各个实例当前处于超载状态,需要通过增加实例的个数来分担各实例的负载。于是实例管理模块在伸缩组中新增n个实例。其中n值可以为1,但也可以为2或更大的整数,以快速增加伸缩组的实例的个数。
可选的,在单调递增时间窗内,实例管理模块可以周期性的执行步骤103和104,以多次实现伸缩组实例的增加。
可选的,第二上限值可以设置的较第一上限值更小,使得实例管理模块在单调递增时间窗内能够更快的增加实例个数。以CPU使用率为例:第一上限值可以设置为“CPU使用率80%”,使得只有在实例的平均CPU使用率超过80%的情况下才创建单调递增时间窗,以保证系统的稳定性;而第二上限值可以设置为“CPU使用率70%”,使得进入单调递增时间窗后,只需实例的平均CPU使用率高于70%就增加实例,这样就使得系统能够快速的增加实例个数。
步骤101至104提供了一种实例弹性伸缩方法,其中,实例管理模块在伸缩组中实例当前的负载状态超过第一上限值时,创建单调递增时间窗,并在单调递增时间窗内判断伸缩组中实例的负载状态是否超过第二上限值,若超过则在伸缩组中增加n个实例。且在单调递增时间窗内,伸缩组中的实例的个数不会减少,只会增多或保持不变。由于在单调递增时间窗内伸缩组中实例的个数只能单向变化,故在该单调递增时间窗内系统只需要考虑分配资源即可,不会出现分配后又立刻回收资源的情况,这样就避免了系统的震荡,能够在一定的程度上保证系统的稳定性。在系统稳定性得到保障的基础上,系统的实例个数就可以快速增加。这样就能够兼顾系统稳定性与伸缩组的伸缩速率,能够应对业务出现猛增的应用场景。
步骤101至104中实例管理模块通过创建单调递增时间窗,使得伸缩组只能单向伸长,进而保证了系统的稳定性。同理的,实例管理模块也可以创建单调递减时间窗,使得伸缩组只能单向缩短。具体的方法如下:
105、判断伸缩组中实例的负载状态是否低于第一下限值。
实例管理模块判断伸缩组中实例的负载状态是否低于第一下限值。与第一上限值类似的,第一下限值可以为CPU使用率、或内存占用率、或磁盘IOPS、或网络带宽、或磁盘占用率中的一个或几个参数,也可以为其它参数,此处不做限定。以CPU使用率为例:第一下限值可以设置为“CPU使用率40%”,若伸缩组中实例的平均CPU使用率低于40%,则认为伸缩组中实例当前的负载状态低于第一下限值。
若确定伸缩组中实例当前的负载状态满足第一下限值,则执行步骤106。
106、创建单调递减时间窗。
若伸缩组中实例当前的负载状态低于第一下限值,则可以认为伸缩组中各个实例当前为业务提供的资源过剩,实例管理模块创建单调递减时间窗。单调递减时间窗是实例管理模块预设的一段时间段。“单调递减”顾名思义,指的是在单调递减时间窗内,伸缩组中的实例的个数可以减少也可以不变,但是不能增加。
单调递减时间窗可以是从当前时刻起始,也可以是从其它的时刻起始,此处不做限定。单调递减时间窗的持续时长可以人为设定,也可以由实例管理模块自行设定,此处不做限定。
设置好了单调递减时间窗后,实例管理模块在单调递减时间窗内,执行步骤107和108。
107、判断伸缩组中实例的负载状态是否低于第二下限值。
实例管理模块判断伸缩组中实例当前的负载状态是否低于第二下限值。与第一下限值类似的,第二下限值也可以为CPU使用率、或内存占用率、或磁盘的IOPS、或网络带宽、或磁盘占用率中的一个或几个参数,也可以为其它参数。
若确定伸缩组中实例当前的负载状态低于第二下限值,则执行步骤108。
108、删除j个实例。
若伸缩组中实例当前的负载状态低于第二下限值,则认为伸缩组中各个实例当前为业务提供的资源过剩,需要通过减少实例的个数来降低释放资源以避免浪费。于是实例管理模块在伸缩组中删除j个实例。其中j值可以为1,但也可以为2或更大的整数,以快速减少伸缩组的实例的个数。
可选的,在单调递减时间窗内,实例管理模块可以周期性的执行步骤107和108,以多次实现伸缩组实例的减少。
可选的,第二下限值可以设置的较第一上限值更高,使得实例管理模块在单调递减时间窗内能够更快的较少实例个数。以CPU使用率为例:第一下限值可以设置为“CPU使用率30%”,使得只有在伸缩组中实例的平均CPU使用率低于30%的情况下才创建单调递减时间窗,以保证系统的稳定性;而第二下限值可以设置为“CPU使用率40%”,使得进入单调递减时间窗后,只需伸缩组中实例的平均CPU使用率低于40%就减少实例,这样就使得系统能够快速的减少实例的个数。
步骤105至108对本发明提供的实例弹性伸缩方法进行了补充,其中,实例管理模块在伸缩组中实例的负载状态低于第一下限值时,创建单调递减时间窗,并在单调递减时间窗内判断伸缩组中实例的负载状态是否低于第二下限值,若低于则在伸缩组中减少j个实例。且在单调递减时间窗内,伸缩组中的实例的个数不会增加,只会减少或保持不变。由于在单调递减时间窗内伸缩组中实例的个数只能单向变化,故在该单调递减时间窗内系统只需要考虑回收资源即可,不会出现回收后又立刻分配资源的情况,这样就避免了系统的震荡,能够在一定的程度上保证系统的稳定性。在系统稳定性得到保障的基础上,系统的实例个数就可以快速减少,这样就能够兼顾系统稳定性与伸缩组的伸缩速率,能够应对业务出现猛增的应用场景。
可以理解的,由于第一上限值与第二上限值用于判断实例是否超载,第一下限值与第二下限值用于判断实例提供的资源是否过剩,因此可选的,第一上限值与第二上限值,均应大于第一下限值与第二下限值。
可以理解的,步骤101至104,与步骤105至108仅为实例弹性伸缩方法的不同分支,在执行上没有特定的先后顺序,实例管理模块可以根据当前伸缩组中实例的负载状态,选择执行步骤101至104,或步骤105至108。
可选的,考虑到在实际应用中系统能够承受一定程度上的资源过剩,但是对超载的承受度较小,故单调递增时间窗的长度可以设置的比单调递减时间窗的长度长一些,使得系统能够更好的应对业务猛增的应用场景。
步骤104中,实例管理模块在伸缩组中新增n个实例。在伸缩组中增加实例一般通过如下方法实现:拷贝待增加的实例的镜像文件以完成实例的部署工作,并待镜像文件拷贝完成后启动该实例。其中,虚拟机等实例在部署的时候需要拷贝的镜像文件较大,因此每增加一个实例都需要花费较长的时间,导致实例的增加速度出现瓶颈。这显然不能满足业务对快速增加实例的需求。为了加快实例的增加速度,本发明中实例管理模块可以在步骤104之前,预先在伸缩组中完成m个实例的部署,然后步骤104中只需要在已部署的实例中启动n个即可实现实例的新增。由于在启动实例之前已经批量的完成了实例的部署,因此启动实例花费的时间很短,能够快速的增加实例的个数。其中,实例管理模块可以在步骤101确定伸缩组中实例的负载状态超过第一上限值后执行批量部署m个实例的动作,其中,m为不小于n的整数。
若实例管理模块采用批量部署m个实例,每次启动n个的实例新增方式,则有可能出现如下场景:(1)在单调递增时间窗结束时,该m个实例中只启动了m-p个,还有p个实例未启动,其中p为小于m的整数。(2)m个实例已经全部启动,但是单调递增时间窗还未结束。对于场景(1),若在单调递增时间窗结束后伸缩组中实例的负载不超过第一上限值,则实例管理模块回收该p个未启动的实例。若伸缩组中实例的负载仍然超过第一上限值,则实例管理模块再次创建单调递增时间窗,但是仅需要再部署m-p个实例,使得未启动的实例个数为m即可。对于场景(2),若在m个实例全部启动后伸缩组中实例的负载仍然超过第二上限值,则实例管理模块再次批量部署新的实例,具体部署的个数可以为m个,也可以为其它数值。
上面对单调递增时间窗内的实例管理进行论述。下面将介绍单调递减时间窗内的实例管理。在步骤108中,实例管理模块删除j个实例。一般的,删除实例指的是将实例停止并删除该实例相关的镜像文件。但是,单调递减时间窗之后可能会迎来单调递增时间窗,若将实例的镜像文件全部删除,则意味着实例管理模块要为单调递增时间窗重新部署实例,这无疑会增加系统的任务量,浪费系统的计算资源和时间资源。因此,实例管理模块在步骤105确定当前系统的负载低于第一下限值后,可以直接停止i个实例,其中i为不小于j的整数。其中停止实例指的是停止实例的运作以降低对业务的资源供给,但不删除实例的镜像文件。然后步骤108只需要在已停止的实例中删除j个实例,即删除j个实例的镜像文件即可。假设在单调递减时间窗结束时还有q个实例的镜像文件未被删除,且接下来的时间窗为单调递增时间窗,则实例管理模块只需要部署m-q个实例即可。这样就节约了部署实例的任务量和时间,有利于提升系统的效率。
可选的,若在单调递减时间窗结束时还有q个实例的镜像文件未被删除,且伸缩组中实例的负载状态仍然低于第一下限值,则实例管理模块再次创建单调递减时间窗,但仅需要停止i-q个实例,使得停止的实例的个数为i即可,其中q为小于i的整数。
可选的,若在i个实例的镜像文件已经全部删除,但是单调递减时间窗还未结束,且当前伸缩组中实例的负载状态仍然低于第二下限值,则实例管理模块再次批量停止实例,具体停止的个数可以是i个也可以是其它数值。
下面将在上述实施例的基础上,对本发明提供的实例弹性伸缩方法所涉及的参数进行总结,具体请参阅表2和表3。其中,表2给出的是时间窗的参数配置的一个示例,表3给出的是管理伸缩组的相关参数配置的一个实例:
表2
参数 |
值 |
触发指标 |
CPU使用率 |
指标采集周期 |
60秒 |
上限 |
70% |
上限触发动作 |
+1实例 |
下限 |
40% |
下限触发动作 |
-1实例 |
表3
通过将表2、表3与表1对比可以发现,本发明提供的实例弹性伸缩方法不涉及“持续时间”和“伸缩冷却时间”,这是因为本发明通过创建单向的时间窗,保证了系统在时间窗内不会发生震荡,因而无需通过“持续时间”和“伸缩冷却时间”保证系统的稳定,能够加快伸缩组中实例个数的变化速率。
优选的,实例管理模块可以将参数值的范围设置为:第一上限值>第二上限值>第二下限值>第一下限值。其中若伸缩组中实例的负载超过第一上限值,则执行步骤101至104,若伸缩组中实例的负载低于第一下限值,则执行步骤105至108。此外,若伸缩组中实例的负载在第一上限值与第一下限值之间,则可以按照现有的弹性伸缩技术来缓慢调整伸缩组中实例的个数。
图1(b)所示的实施例介绍了本发明提供的实例弹性伸缩方法,下面将介绍用于实现该方法的实例管理模块,请参阅图2。实例管理模块的基本结构包括:
负载判断单元201,用于判断伸缩组中实例的负载状态是否超过第一上限值。
时间管理单元202,用于在负载判断单元201确定伸缩组中实例的负载状态超过第一上限值时,创建单调递增时间窗。其中,伸缩组中实例的个数在该单调递增时间窗内不减少。
负载判断单元201还用于:在单调递增时间窗内,判断伸缩组中虚拟化实例的负载状态是否超过第二上限值。
实例伸缩单元203,还用于在负载判断单元201确定伸缩组中化实例的负载状态超过第二上限值时,在伸缩组中新增n个虚拟化实例,其中n为不小于1的整数。
实例管理模块中的各单元的具体运行流程可以参阅图1(b)所示的实施例的相关描述,此处不做赘述。
可选的,实例伸缩单元203还用于在负载判断单元201确定伸缩组中实例的负载状态超过第一上限值时,在系统中拷贝m个实例的镜像文件,以实现m个实例的部署。其中m为不小于n的整数。这样在负载判断单元201确定伸缩组实例的负载超过第二上限值时,实例伸缩单元203只需要在已部署的m个实例中,启动n个实例即可。
可选的,负载判断单元201在单调递增时间窗内,可以每隔预置周期,执行判断伸缩组中实例的负载状态是否超过第二上限值的步骤,其中预置周期的长度小于单调递增时间窗的长度。当单调递增时间窗结束时,若已部署的m个实例中还有p个未启动,且伸缩组中实例的负载状态仍然超过第一上限值,则时间管理单元202再次执行创建单调递增时间窗的步骤,且实例伸缩单元203在系统中再次部署m-p个实例。其中p为小于m的整数。
可选的,在单调递增时间窗内,若已部署的m个实例已经全部启动,且伸缩组中实例的状态仍然超过第二上限值,则实例伸缩单元203在系统中再次部署新的实例。
可选的,负载判断单元201还用于:判断伸缩组中实例的负载状态是否低于第一下限值。时间管理单元202还用于在负载判断单元201确定实例的负载状态低于第一下限值时,设置单调递减时间窗。其中,伸缩组中实例的个数在单调递减时间窗内不增加。负载判断单元201还用于在单调递减时间窗内,判断伸缩组中实例的负载状态是否低于第二下限值。实例伸缩单元203还用于在负载判断单元201确定伸缩组中实例的负载状态低于第二下限值时,在伸缩组中删除j个实例。其中j为不小于1的整数。
可选的,实例伸缩单元203还用于在负载判断单元201确定伸缩组中实例的负载状态低于第一下限值时,在伸缩组中停止i个实例,其中i为不小于j的整数。实例伸缩单元203还用于在负载判断单元201确定伸缩组中实例的负载状态低于第二下限值时,在已停止的i个实例中,删除j个实例的镜像文件。
上面从功能化单元的角度介绍了本发明提供的实例管理模块。其中,图1(a)以及图2中的实例管理模块均可以由计算设备300实现。该计算设备300的具体结构请参阅图3,包括:处理器301、存储器302、通信接口303以及总线304。其中,处理器301、存储器302和通信接口303可以通过总线304实现彼此之间的通信连接,也可以通过无线传输等其他手段实现通信。
存储器302存储器可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM);存储器也可以包括非易失性存储器(英文:non-volatile memory),例如只读存储器(英文:read-only memory,缩写:ROM),快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:HDD)或固态硬盘(英文:solid-state drive,缩写:SSD);存储器302还可以包括上述种类的存储器的组合。在通过软件来实现本发明提供的技术方案时,用于实现本发明提供的实例弹性伸缩方法的程序代码可以保存在存储器302中,并由处理器301来执行。
处理器301可以为CPU、图形处理器(英文:graphics processing unit,缩写:GPU)、数字信号处理(英文:digital signal processing,缩写:DSP)、现场可编程门阵列(英文:field-programmable gate array,缩写:FPGA)、硬件芯片等具有处理功能的硬件单元中的任意一种或几种的组合。在计算设备300运行时,处理器301主要用于执行本发明提供的实例弹性伸缩方法,具体可以参考图1(b)所示的实施例中的相关描述,此处不做赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。