基于负载跟踪的容器弹性伸缩方法、系统、设备及介质转让专利

申请号 : CN202311330325.1

文献号 : CN117076136B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王晓云耿永玲王超陈璐莫文锋曹建

申请人 : 国能(北京)商务网络有限公司

摘要 :

本发明属于计算机技术领域,具体涉及一种基于负载跟踪的容器弹性伸缩方法、系统、设备及介质,其中方法包括:获取容器的当前实际负载;并将当前实际负载作为参考输入至负载跟踪器中;负载跟踪器将参考输入与上一次输出的差值作为误差值,并计算出调制后的负载;云服务器根据调制后的负载,计算获取容器所需要的计算资源,并根据当前所需要的计算资源进行弹性伸缩调整。该方法通过采用正负误差感知的PID控制算法实现负载跟踪器对系统实际负载的跟踪与调制,结合算法的调适参数,可以有效提高负载跟踪器负载增长的灵敏度与正偏差的补偿效果,且由于应用PID算法,计算复杂度低。

权利要求 :

1.一种基于负载跟踪的容器弹性伸缩方法,其特征在于,包括:获取容器的当前实际负载;并将当前实际负载作为参考输入至负载跟踪器中;其中,所述当前实际负载为服务器的一个容器在当前时刻所需要的计算资源,在获取所述当前实际负载时,当负载为处理器负载时,则当前实际负载r(t)=UcpuP,其中,Ucpu表示容器的处理器资源利用率,P表示服务器为容器所分配的处理器容量;当负载为内存占用量时,当前实际负载r(t)= UmenM,其中,Umen表示容器的内存利用率,M表示服务器为容器所分配的内存容量;

负载跟踪器将参考输入与上一次输出的差值作为误差值,并计算出调制后的负载;具体如下式:其中,kp、ki以及kd分别表示比例调适参数、积分调适参数和微分调适参数,u(t)表示负载跟踪器调制后的负载输出,e(t)表示误差值,t表示当前时刻;所述误差值e(t)的获取如下式,其中,ke表示误差放大调适参数;

云服务器根据调制后的负载,计算获取容器所需要的计算资源,并根据当前所需要的计算资源进行弹性伸缩调整;具体为,当 时,触发扩容调整,容器所需要的计算资源 ,其中, 表示触发扩容的负载资源利用率阈值,y(t)表示容器所需要的计算资源;

当 时,触发缩 容调整,容器 所需要的计算 资源,其中, 表示触发缩容的负载资源利用率阈值,

当 时,则保持当前容量不变,容器所需要

的计算资源 。

2.如权利要求1所述的基于负载跟踪的容器弹性伸缩方法,其特征在于,所述比例调适参数kp根据误差的变化进行调整。

3.如权利要求1所述的基于负载跟踪的容器弹性伸缩方法,其特征在于,所述积分调适参数ki根据现有累计的误差进行调整,如下式:;

其中, 表示e(t)非负时的ki, 表示e(t)为负时的ki。

4.如权利要求1所述的基于负载跟踪的容器弹性伸缩方法,其特征在于,所述微分调适参数kd根据误差变化的趋势进行调整,如下式:;

其中, 表示误差微分非负时的kd, 表示误差微分为负时的kd。

5.一种基于负载跟踪的容器弹性伸缩系统,其特征在于,包括负载跟踪器以及弹性伸缩控制器;

所述负载跟踪器用于基于容器的当前实际负载获取调制后的负载,具体如下式:其中,kp、ki以及kd分别表示比例、积分和微分调适参数,u(t)表示负载跟踪器调制后的负载输出,e(t)表示误差值,t表示当前时刻;

其中,误差值e(t)的获取如下式,

ke表示误差放大调适参数;

所述当前实际负载为服务器的一个容器在当前时刻所需要的计算资源,在获取所述当前实际负载时,当负载为处理器负载时,则当前实际负载r(t)=UcpuP,其中,Ucpu表示容器的处理器资源利用率,P表示服务器为容器所分配的处理器容量;当负载为内存占用量时,当前实际负载r(t)= UmenM,其中,Umen表示容器的内存利用率,M表示服务器为容器所分配的内存容量;

所述伸缩控制器用于根据调制后的负载,计算获取容器所需要的计算资源,并根据当前所需要的计算资源进行弹性伸缩调整,具体为,当 时,触发扩容调整,容器所需要的计算资源 ,其中, 表示触发扩容的负载资源利用率阈值,y(t)表示容器所需要的计算资源;

当 时,触发缩 容调整,容器 所需要的计算 资源,其中, 表示触发缩容的负载资源利用率阈值,

当 时,则保持当前容量不变,容器所需要

的计算资源 。

6.一种电子设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现权利要求1至4中任一项所述的基于负载跟踪的容器弹性伸缩方法。

7.一种可读存储介质,其特征在于,所述可读的存储介质包括存储的程序,其中,所述程序可被终端设备或计算机运行时执行所述权利要求1至4中任一项所述的基于负载跟踪的容器弹性伸缩方法。

说明书 :

基于负载跟踪的容器弹性伸缩方法、系统、设备及介质

技术领域

[0001] 本发明属于计算机技术领域,具体而言,涉及基于负载跟踪的容器弹性伸缩方法、系统、设备及介质。

背景技术

[0002] 容器技术是一种在操作系统内核之上的轻量级虚拟化技术,该技术支持开发者将应用程序以及其依赖环境打包至一个可移植的镜像中。打包好的镜像可以发行流通并运行在主流的操作系统上。同时,容器技术为不同的应用提供了良好的兼容性与隔离性,以确保容器在不同环境下能够稳定运行并不会相互影响。
[0003] 容器技术为应用程序提供了一个最小虚拟化环境,与主流面向操作系统的虚拟化技术不同的是,容器的部署更快,资源消耗更低,可以移植拓展性更强。主流面向操作系统的虚拟化机在部署时,一般需要数分钟才能完成资源的分配与系统的启动,而基于容器技术的应用根据程序的规模,只需毫秒级或秒级时间便可完成部署。在面对服务需求变动时,容器技术拥有更短的响应时间周期,能够更快地完成资源的扩容或者缩容,以便于在服务需求增长时尽快满足服务需求,或者在需求下降时及时释放资源,以减少资源浪费。因此,容器技术在云计算服务器中受到了广泛的应用。
[0004] 目前主流的容器引擎,如docker,Kubernetes,主要通过监视系统负载与用户静态设定的阈值来实现容器的弹性伸缩。此外,国内外的相关研究也提出了基于模型预测的方式来实现容器的弹性伸缩。然而,基于静态阈值的弹性伸缩方法无法有效面对需求激增与抖动现象,导致资源扩容响应不及时或资源反复分配释放的情况,造成不必要的开销。另一方面,基于模型预测的方法在需求变化难以预测或在泛应用场景下的预测精确性可能存在较大误差,并存在学习成本。因此在安全关键或新领域的应用存在挑战。
[0005] 综上可知,现有技术主要存在以下不足:
[0006] (1)传统基于阈值的自动伸缩策略需要在容器负载达到指定的一个阈值才触发容器调整策略,对负载的激增或连续增长存在响应延迟;
[0007] (2)传统基于阈值的自动伸缩策略在遇到负载波动时可能导致资源的频繁分配与释放,造成不必要的开销;
[0008] (3)基于预测的伸缩算法在依赖于事先训练的模型,对未知变化的响应与泛化能力不足。
[0009] 因此,本发明旨在提供一种容器弹性伸缩方法以解决上述问题。

发明内容

[0010] 本发明的目的在于提供基于负载跟踪的容器弹性伸缩方法、系统、设备及介质,以解决背景技术中所指出的现有技术的不足之处。
[0011] 本发明的实施例通过以下技术方案实现:
[0012] 第一方面,提供一种基于负载跟踪的容器弹性伸缩方法,包括:
[0013] 获取容器的当前实际负载;并将当前实际负载作为参考输入至负载跟踪器中;
[0014] 负载跟踪器将参考输入与上一次输出的差值作为误差值,并计算出调制后的负载;具体如下式:
[0015]
[0016] 其中,kp、ki以及kd分别表示比例调适参数、积分调适参数和微分调适参数,u(t)表示负载跟踪器调制后的负载输出,e(t)表示误差值,t表示当前时刻;
[0017] 云服务器根据调制后的负载,计算获取容器所需要的计算资源,并根据当前所需要的计算资源进行弹性伸缩调整。
[0018] 进一步的,所述获取容器的当前实际负载中的当前实际负载为服务器的一个容器在当前时刻所需要的计算资源,在获取所述当前实际负载时,当负载为处理器负载时,则当前实际负载r(t)=UcpuP,其中,Ucpu表示容器的处理器资源利用率,P表示服务器为容器所分配的处理器容量;当负载为内存占用量时,当前实际负载r(t)=UmenM,其中,Umen表示容器的内存利用率,M表示服务器为容器所分配的内存容量。
[0019] 进一步的,所述误差值e(t)的获取如下式,
[0020]
[0021] 其中,ke表示误差放大调适参数。
[0022] 进一步的,所述比例调适参数kp根据误差的变化进行调整。
[0023] 进一步的,所述积分调适参数ki根据现有累计的误差进行调整,如下式:
[0024] ;
[0025] 其中, 表示e(t)非负时的ki, 表示e(t)为负时的ki。
[0026] 进一步的,所述微分调适参数kd根据误差变化的趋势进行调整,如下式:
[0027] ;
[0028] 其中, 表示误差微分非负时的kd, 表示误差微分为负时的kd。
[0029] 进一步的,所述云服务器根据调制后的负载,计算获取容器所需要的计算资源,并根据当前所需要的计算资源进行弹性伸缩调整,具体为,当 时,触发扩容调整,容器所需要的计算资源 ,其中, 表示触发扩
容的负载资源利用率阈值,y(t)表示容器所需要的计算资源;
[0030] 当 时,触发缩容调整,容器所需要的计算资源,其中, 表示触发缩容的负载资源利用率阈值,
[0031] 当 时,则保持当前容量不变,容器所需要的计算资源 。
[0032] 第二方面,提供一种基于负载跟踪的容器弹性伸缩系统,包括负载跟踪器以及弹性伸缩控制器;
[0033] 所述负载跟踪器用于基于容器的当前实际负载获取调制后的负载,具体如下式:
[0034]
[0035] 其中,kp、ki以及kd分别表示比例、积分和微分调适参数,u(t)表示负载跟踪器调制后的负载输出,e(t)表示误差值,t表示当前时刻;
[0036] 所述伸缩控制器用于根据调制后的负载,计算获取容器所需要的计算资源,并根据当前所需要的计算资源进行弹性伸缩调整,具体为,当 时,触发扩容调整,容器所需要的计算资源 ,其中, 表示触发扩容
的负载资源利用率阈值,y(t)表示容器所需要的计算资源;
[0037] 当 时,触发缩容调整,容器所需要的计算资源,其中, 表示触发缩容的负载资源利用率阈值,
[0038] 当 时,则保持当前容量不变,容器所需要的计算资源 。
[0039] 第三方面,提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的基于负载跟踪的容器弹性伸缩方法。
[0040] 第四方面,提供一种可读存储介质,所述可读的存储介质包括存储的程序,其中,所述程序可被终端设备或计算机运行时执行上述的基于负载跟踪的容器弹性伸缩方法。
[0041] 本发明实施例的技术方案至少具有如下优点和有益效果:
[0042] 通过采用正负误差感知的PID控制算法实现负载跟踪器对系统实际负载的跟踪与调制,结合算法的调适参数,可以有效提高负载跟踪器负载增长的灵敏度与正偏差的补偿效果,且由于应用PID算法,计算复杂度低;同时将实际负载作为误差计算的参考值,可以提高基于阈值的弹性伸缩策略面对负载增长时的响应速度,避免因资源扩容不足而导致服务质量下降;同时将实际负载作为误差计算的参考值,还可以为基于阈值的缩容策略预留一定的冗余量,避免因负载抖动而导致频繁扩缩容。

附图说明

[0043] 图1为本发明基于负载跟踪的容器弹性伸缩方法的流程图;
[0044] 图2为本发明基于负载跟踪的容器弹性伸缩系统的原理图。

具体实施方式

[0045] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
[0046] 在工业过程控制中,基于对被控对象的实时数据与参考数据所产生误差的比例、积分与微分进行控制的方法,简称为PID(proportional integral derivative)控制方法。PID是一种无模型的控制方法,具有原理简单,鲁棒性强等优点,在控制系统、轨迹跟踪等领域有很强的实用性,是目前应用最广泛的控制算法之一。
[0047] 根据实现方式的不同,PID算法可以分为位置式PID算法与增量式PID算法,两者的主要区别在于增量式PID算法不需要对偏差进行大量累加,输出的为控制信号的相对增量,而不是绝对值,因此增量式PID算法在减少累加误差与计算复杂度上具有优势。
[0048] 考虑到现有的容器弹性伸缩技术存在以下不足:(1)传统基于阈值的自动伸缩策略需要在容器负载达到指定的一个阈值才触发容器调整策略,对负载的激增或连续增长存在响应延迟;(2)传统基于阈值的自动伸缩策略在遇到负载波动时可能导致资源的频繁分配与释放,造成不必要的开销;(3)基于预测的伸缩算法在依赖于事先训练的模型,对未知变化的响应与泛化能力不足。
[0049] 本申请提出一种不需要模型的闭环容器自动伸缩的实现方法,在系统计算资源需求上升时能够迅速响应,以避免因资源不足而导致服务延时,而在系统资源需求下降时,能够以较为平稳的方式进行资源的释放,以避免在需求波动期间造成资源的频繁分配与释放,该方法中负载跟踪器采用通过基于正负误差感知的PID算法来跟踪系统的负载变化,通过对正负误差提供不同的PID调适参数调整,从而调整对负载上升与下降时跟踪的灵敏度;再基于负载跟踪器输出的负载与系统伸缩阈值进行比较,进而根据比较结果采取扩容或缩容操作。
[0050] 具体的,提供一种基于负载跟踪的容器弹性伸缩方法,如图1所示,包括:
[0051] 获取容器的当前实际负载;并将当前实际负载作为参考输入至负载跟踪器中;需要说明的是,当前实际负载为服务器的一个容器在当前时刻所需要的计算资源,在获取所述当前实际负载时,当负载为处理器负载时,则当前实际负载r(t)=UcpuP,其中,Ucpu表示容器的处理器资源利用率,P表示服务器为容器所分配的处理器容量;当负载为内存占用量时,当前实际负载r(t)=UmenM,其中,Umen表示容器的内存利用率,M表示服务器为容器所分配的内存容量。
[0052] 也就是说,实际负载包括处理器负载和内存占用量负载,在本方案中,处理器负载和内存占用量负载的伸缩调制是相互独立的,也即后续的计算过程中,所提及的实际负载是处理器负载或内存占用量负载;也可以理解为,本申请方案既可以用于处理器负载的伸缩调整,也可以用于内存占用量负载的伸缩调整。
[0053] 负载跟踪器将参考输入与上一次输出的差值作为误差值,并计算出调制后的负载;具体的实施方式中,采用下式计算:
[0054]
[0055] 其中,kp、ki以及kd分别表示比例调适参数、积分调适参数和微分调适参数,u(t)表示负载跟踪器调制后的负载输出,e(t)表示误差值,t表示当前时刻;可以理解的是e(t-1)即上一时刻的误差值,e(t-2)即上上一时刻的误差值,依次类推。
[0056] 可见在本申请中,基于正负误差感知的PID算法仅负责负载的跟踪与调制,其目的在于借助于正负误差感知的PID算法中的误差计算、积分控制以及微分控制部分对系统的负载进行跟踪与调制,以满足系统对负载上升与下降的响应需求,而不直接参与服务器弹性伸缩的控制;如图2所示,负载跟踪器的反馈控制使用了输出 (t),而不是服务器的伸缩控制输出y(t)。
[0057] 在本实施方式中,误差值e(t)的获取如下式,
[0058]
[0059] 其中,ke表示误差放大调适参数。可以理解的是,误差的作用在于告诉负载跟踪器当前的结果与实际目标的偏差,从而为下一次的计算提供一个反馈。同时,负载跟踪器在面对负载增长时的跟踪响应可能存在一定的延迟,尤其是在负载发生增长的初始阶段或变化速率较大时。对此,本申请在误差的计算过程中为容器的当前负载乘以一个不小于1的系数ke,用于表示误差放大调适参数。将参考值放大可有效降低负载跟踪器因跟踪延迟而导致的输出与实际负载之间的正偏差,提高负载跟踪器应对负载增长时的响应速度。当然,ke并不是越大越好,过大的ke可能导致负载跟踪器的输出远高于实际负载,从而导致资源的浪费。
[0060] 此外,本实施方式中的比例调适参数kp根据误差的变化进行调整;具体的,比例调适参数kp的取值需要根据误差变动范围大小进行调整,若误差变化范围大,可适当提高kp的大小,反之减小kp;具体的,可以设置相应的比例调适参数阈值上下限,当误差大于比例调适参数阈值上限时,适当提高kp的大小,当误差小于比例调适参数阈值下限时,适当减小kp。
[0061] 本实施方式中的积分调适参数ki根据现有累计的误差进行调整,具体如下式:
[0062] ;
[0063] 其中, 表示e(t)非负时的ki, 表示e(t)为负时的ki。
[0064] 积分调适参数ki的取值决定了系统对误差累计修正的能力。ki取值越大,对累积误差的纠正能力越强。在本方法所面向的领域中, 的值应当大于 的值,以提高对正误差累积的修正能力以及减弱对负误差累积的修正能力;可以理解的是,当 < 时,负载跟踪器的输出小于当前系统负载参考值时的响应灵敏度要高于负载跟踪器的输出大于当前系统负载参考值时的响应灵敏度。
[0065] 本实施方式中的微分调适参数kd根据误差变化的趋势进行调整,如下式:
[0066] ;
[0067] 其中, 表示误差微分非负时的kd, 表示误差微分为负时的kd。
[0068] 同样的,微分调适参数kd的取值决定了系统对误差变化修正的能力。kd取值越大,对误差变化的纠正能力越强。在本方法所面向的领域中, 的值应当大于 的值,从而提高对正误差变化的修正能力以及减弱对负误差变化的修正能力;可以理解的是,当 <时,负载跟踪器对前系统负载参考值增长的灵敏度要高于负载跟踪器对前系统负载参考值下降的灵敏度。
[0069] 在上述的基于正负误差可感知的PID算法中,通过比例、积分和微分调适参数实现控制,其中比例调适参数能够克服系统误差,积分调适参数能够克服累计误差,微分调适参数能够提高系统动态响应速度。
[0070] 云服务器根据调制后的负载,计算获取容器所需要的计算资源,并根据当前所需要的计算资源进行弹性伸缩调整。具体的,需要做如下判断:
[0071] 当 时,触发扩容调整,容器所需要的计算资源,其中, 表示触发扩容的负载资源利用率阈值,y(t)表示容
器所需要的计算资源。
[0072] 当 时,触发缩容调整,容器所需要的计算资源,其中, 表示触发缩容的负载资源利用率阈值。
[0073] 当 时,则保持当前容量不变,容器所需要的计算资源 。
[0074] 可见,本申请的方法通过采用正负误差感知的PID控制算法实现负载跟踪器对系统实际负载的跟踪与调制,结合算法的调适参数,可以有效提高负载跟踪器负载增长的灵敏度与正偏差的补偿效果,且由于应用PID算法,计算复杂度低;同时将实际负载作为误差计算的参考值,可以提高基于阈值的弹性伸缩策略面对负载增长时的响应速度,避免因资源扩容不足而导致服务质量下降;同时将实际负载作为误差计算的参考值,还可以为基于阈值的缩容策略预留一定的冗余量,避免因负载抖动而导致频繁扩缩容。
[0075] 另外,本申请还提供一种基于负载跟踪的容器弹性伸缩系统,其包括负载跟踪器以及弹性伸缩控制器。
[0076] 其中,负载跟踪器用于基于容器的当前实际负载获取调制后的负载,具体如下式:
[0077]
[0078] 其中,kp、ki以及kd分别表示比例、积分和微分调适参数,u(t)表示负载跟踪器调制后的负载输出,e(t)表示误差值,t表示当前时刻;
[0079] 可以理解的是,误差值e(t)的获取如下式,
[0080]
[0081] 其中,ke表示误差放大调适参数。
[0082] 且在本实施例中,比例控制部分根据误差的变化做出调整,积分控制部分根据现有累计的误差做出调整,微分控制部分则根据误差变化的趋势做出调整。为了实现应对负载增长的快速响应,以及在缓解负载下降过程中可能发生的抖动,本发明在积分与微分部分,根据输入的不同采用了不同的积分和微分调适参数:
[0083]
[0084]
[0085] 根据误差输入区分积分与微分调适参数,可以控制负载跟踪器在面对负载增长和下降的响应灵敏度以及当负载跟踪器的输出大于和小于参考值时的响应灵敏度。例如,当< 时,负载跟踪器的输出小于当前系统负载参考值时的响应灵敏度要高于负载跟踪器的输出大于当前系统负载参考值时的响应灵敏度;当 < 时,负载跟踪器对前系统负载参考值增长的灵敏度要高于负载跟踪器对前系统负载参考值下降的灵敏度。
[0086] 而伸缩控制器用于根据调制后的负载,计算获取容器所需要的计算资源,并根据当前所需要的计算资源进行弹性伸缩调整,具体为,当 时,触发扩容调整,容器所需要的计算资源 ,其中, 表示触发扩容的
负载资源利用率阈值,y(t)表示容器所需要的计算资源;
[0087] 当 时,触发缩容调整,容器所需要的计算资源,其中, 表示触发缩容的负载资源利用率阈值,
[0088] 当 时,则保持当前容量不变,容器所需要的计算资源 。
[0089] 需要理解的是,上述系统中的所采用的方法与前述的基于负载跟踪的容器弹性伸缩方法一致,具体实施方式便不在此处赘述。
[0090] 进一步的,本申请提供的一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的基于负载跟踪的容器弹性伸缩方法。
[0091] 以及提供一种可读存储介质,所述可读的存储介质包括存储的程序,其中,所述程序可被终端设备或计算机运行时执行上述的基于负载跟踪的容器弹性伸缩方法。
[0092] 在电子设备以及可读存储介质中提及的基于负载跟踪的容器弹性伸缩方法的具体实施方式均与前述的基于负载跟踪的容器弹性伸缩方法一致,因此,在此处具体实施方式便不再赘述。
[0093] 以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。