一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于定长服务排队模型的云平台自动伸缩方法与流程

2022-05-27 03:13:13 来源:中国专利 TAG:


1.本发明涉及云计算资源及任务调度领域,具体涉及一种基于定长服务排队模型的云平台自动伸缩方法。


背景技术:

2.随着计算机技术的飞速发展,传统的单体架构逐渐向分布式集群架构演进,系统规模和负载度逐渐上升,这大大增加了运维开发人员的维护和研发难度。在云计算快速发展的今天,越来越多的服务被部署到云端,虚拟化技术实现跨主机的硬件资源共享,通过将底层硬件资源进行池化的方式,云平台可以为应用服务提供无穷无尽的计算资源。docker作为轻量的虚拟化技术,因其具有隔离性好、敏捷部署等优点,已逐渐成为现代云平台的标准。
3.如今,越来越多的微服务docker容器给管理和运维带来了巨大的压力,因此自动化运维管理的容器编排工具kubernetes被设计出来。基于kubernetes的容器云编排平台正逐渐成为通用模式并得到广泛应用。然而,在容器编排过程中,kubernetes传统的自动伸缩策略是响应式的横向伸缩。由于kubernetes默认对容器资源负载采样周期是30秒,容易产生扩缩容不及时带来服务质量下降或者资源浪费的问题。同时,kubernetes的自动伸缩策略在扩容和缩容的情况下分别有3分钟和5分钟的冷冻期,无法实现实时扩缩容。近年来,根据容器的预测负载估计容器最优数量,从而将集群容器数量伸缩到最优数量,逐渐成为云计算自动伸缩研究的热点。


技术实现要素:

4.为了克服现有技术中基于kubernetes的容器云平台传统响应式自动伸缩策略滞后性所带来服务质量下降或者资源浪费问题,本发明提供一种能够在任意时刻依据cpu历史复杂数据预测未来负载,并基于定长服务排队模型的云平台自动伸缩方法。
5.本发明采用如下技术方案:
6.一种基于定长服务排队模型的云平台自动伸缩方法,进一步,包括:
7.搭建kubernetes容器编排平台和prometheus云监控平台,通过周期性采集云平台应用服务历史cpu负载数据,并对下一周期云平台应用服务的cpu负载值进行预测;
8.根据单一应用服务的任务相似性及cpu负载的预测值,获得下一个采样周期内到达的任务数量,应用服务的任务最大延迟,并为系统容器数量设置阈值;
9.以采样周期为单位时间间隔,构建定长服务m/d/1模型,根据m/d/1模型的服务强度计算系统忙期时长;
10.采用遍历法搜索定长服务m/d/1模型优化目标的最优解,作为系统下一个采样周期的最优容器数量。
11.进一步,所述搭建kubernetes容器编排平台和prometheus云监控平台,具体如下:
12.搭建kubernetes集群,集群包含一个主节点和n个node节点,设定主节点名称为
k8s-master,node节点名称根据节点序号设定为k8s-node(i),i=1,2,

,n,节点采用同样的主机配置;
13.将prometheus以docker容器形式发布,通过kubernetes管理prometheus容器的编排调度得到kubernetes容器编排平台;
14.利用prometheus和node-exporter组件搭建云监控平台,实现对集群节点状态的监控。
15.进一步,通过周期性采集云平台应用服务历史cpu负载数据,并对下一周期云平台应用服务的cpu负载值进行预测,具体为:
16.采集cpu负载数据,构成训练样本集;
17.对训练样本进行预处理及特征提取,并将训练样本、周期注意力向量机峰值注意力向量进行加权求和得到最终训练样本;
18.具体为:
19.所述特征提取包括通过自相关系数发掘数据周期性,生成用于引导模型关注周期特征的周期注意力向量,及通过一阶差分的方式发掘峰值数据,生成用于引导模型关注峰值特征的峰值注意力向量;
20.构建及训练时序卷积神经网络,最终训练样本作为输入信号;
21.采集的周期cpu负载数据输入训练好的时序卷积神经网络,获得cpu负载值的预测值。
22.进一步,所述根据单一应用服务的任务相似性及cpu负载的预测值,获得下一个采样周期内到达的任务数量,具体为:
23.所述采样周期是δt,单一应用服务任务平均执行时间为cpu负载定义是该采样周期内用户态时间和内核态时间的加和与总时间的比值:
[0024][0025]
其中,utime是此时用户态消耗时间,stime是此时内核态消耗时间,lastutime是δt前用户态消耗时间,laststime是δt前内核态消耗时间;
[0026]
设下一个周期cpu负载的预测值为则下一个采样周期内到达的任务数量为:
[0027][0028]
设应用服务的任务最大延迟是delay
max
,所述系统容器数量阈值设置为上、下阈值,上阈值是系统容器最大数量pod-max,下阈值是系统容器最小数量pod-min。
[0029]
进一步,考虑到服务可用性,系统容器数量最小值pod-min为1;系统容器数量最大值pod-max受集群cpu资源r
cap
和单容器cpu资源占用r
req
决定,应当满足如下公式:
[0030][0031]
进一步,所述以采样周期为单位时间间隔,构建定长服务m/d/1模型,根据m/d/1模型的服务强度计算系统忙期时长,具体为:
[0032]
设采样周期为δt,定长服务m/d/1排队模型的服务能力为:
[0033][0034]
其中,是任务平均执行时间;
[0035]
定长服务m/d/1排队模型的任务到达率为:
[0036][0037]
其中,xv是下一个采样周期内到达的任务数,nv是下一个采样周期的容器数量;
[0038]
定长服务m/d/1排队模型的服务强度为:
[0039]
ρ=λ/μ
[0040]
定长服务m/d/1排队模型的忙期时长为:
[0041]
δt
busy
=ρ*δt;
[0042]
由此确定定长服务m/d/1模型的优化目标和约束为:
[0043]
minimize(nv),
[0044]
s.t.δt
busy
<delay
max
且ρ<1
[0045]
其中,nv是下一个采样周期容器数量,δt
busy
是忙期时长,delay
max
是任务最大延迟,ρ是服务强度。
[0046]
进一步,所述采用遍历法搜索定长服务m/d/1模型优化目标的最优解,作为系统下一个采样周期的最优容器数量,具体为:
[0047]
采用遍历法将容器数量从容器下阈值遍历至容器上阈值,如果满足服务强度小于1且忙期时长小于任务最大延迟,则退出循环,取此时的容器数量为下一个采样周期最优容器数量。
[0048]
进一步,所述时序卷积神经网络包括输入层、卷积层及输出层,所述输入层采用1
×
3卷积核的残差块,隐藏层采用膨胀系数依次为2,4,8的空洞卷积的3个残差块,输出层为全连接层。
[0049]
进一步,所述峰值注意力向量,具体为:
[0050]
对输入的lm长度数据点的时序数据data,截取前面l
m-1个数据点计算峰值,得到归一化峰值注意力向量atten
peak

[0051][0052]
其中,当t=1时和t=lm的时候,atten
peak
由0值进行补充,s是归一化操作
[0053]
进一步,所述周期注意力向量,具体为:
[0054]
对输入的lm长度数据点的时序数据data,截取前面l
m-1个数据点进行处理,通过自相关系数公式计算时序数据的自相关向量,取非0下标的最大自相关值的下标作为时序数据的周期t,生成周期注意力向量atten
season

[0055][0056]
其中t是整数,t0是第lm个数据点,控制周期注意力向量的高亮区间长度为总
长度的8%,σ2是周期注意力向量分布的离散度,考虑到正态分布3σ原则,因此至少要大于3σ长度,这样才能保证注意力向量在区间内包括了足够多的注意力数值的可能取值,t

=t0-n*t,n=0,1,2


[0057]
本发明的有益效果:
[0058]
本发明突破时间序列预测分析、m/d/1排队模型求解最佳容器数量和预先扩缩容的关键技术,形成具有预先、支持任意时刻扩缩容、无冷冻期的预测式自动伸缩方法,在解决kubernetes云平台响应式自动伸缩的滞后性、资源分配不足和资源浪费的问题上具有较好的效果,在大规模微服务系统的自动编排平台中具有广泛应用价值。
附图说明
[0059]
图1是本发明的工作流程图;
[0060]
图2是本发明kubernetes云平台和prometheus云监控架构图;
[0061]
图3是本发明的时序卷积神经网络的结构示意图;
[0062]
图4是本发明残差块1的结构图;
[0063]
图5是本发明残差块2的结构图。
具体实施方式
[0064]
下面结合实施例及附图,对本发明作进一步地详细说明,但本发明的实施方式不限于此。
[0065]
实施例
[0066]
如图1-图5所示,一种基于定长服务排队模型的云平台自动伸缩方法,包括:
[0067]
s1搭建kubernetes容器编排平台和prometheus云监控平台,搭建时序卷积神经网络并用训练好的参数初始化神经网络,以一定采样周期采集一定长度的云平台应用服务历史cpu负载数据,并对云平台应用服务的cpu负载值进行预测。
[0068]
进一步,所述搭建kubernetes容器编排平台和prometheus云监控平台,具体为:
[0069]
搭建kubernetes集群,集群包含一个主节点和n个node节点,设定主节点名称为k8s-master,node节点名称根据节点序号设定为k8s-node(i),i=1,2,

,n,节点采用同样的主机配置。
[0070]
主机配置可以采用,操作系统ubuntu20.04,内存16gb,cpu intel core i7-4790@3.6ghz,kubernetes为1.15.0。
[0071]
将prometheus以docker容器形式发布,通过kubernetes管理prometheus容器的编排调度。利用prometheus和node-exporter组件搭建云监控平台,实现对集群节点状态的监控。
[0072]
更进一步,实现对集群节点状态的监控,具体流程如下:
[0073]
通过kubernetes的deployment资源对prometheus容器提供声明式更新。
[0074]
通过daemonset资源对node-exporter容器提供声明式更新。
[0075]
采用基于角色的访问控制机制rbac赋予默认用户访问集群资源的权限,同时prometheus通过拉取模式以一定采样周期δt
prom
主动向node-exporter采集node节点资源
信息,一定采样周期δt
prom
为20s。
[0076]
具体地,通过kubernetes的deployment资源对prometheus容器提供声明式更新,其具体操作是:
[0077]
编写prometheus的kubernetes配置文件,定义deployment资源对象,设定spec.replicas为1,设定spec.template.spec.nodename为k8s-master。同时定义service资源对象,设定service种类为nodeport,开放30003作为kubernetes集群外访问prometheus服务的端口。
[0078]
具体地,通过daemonset资源对node-exporter容器提供声明式更新,其具体操作是:
[0079]
编写node-exporter的kubernetes配置文件,定义daemonset资源,设定容器污点配置为:node-role.kubernetes.io/master:noschedule,设定hostport=9100,将容器映射9100端口到主机9100端口。同时定义service资源对象,开放kubernetes集群内访问node-exporter的端口9100。
[0080]
具体地,采用基于角色的访问控制机制rbac赋予默认用户访问集群资源的权限,其操作方式为:
[0081]
集群创建prometheus角色,为该角色赋予对nodes、pods、endpoints、services、nodes/proxy资源的只读权限,同时将集群默认用户与prometheus角色绑定,这样便能赋予默认用户访问集群资源的权限。
[0082]
进一步,通过周期性采集云平台应用服务历史cpu负载数据,并对下一周期云平台应用服务的cpu负载值进行预测,包括如下步骤:
[0083]
构建时序卷积神经网络,所述时序卷积神经网络包括输入层、隐藏层及输出层。所述输入层采用1
×
3卷积核的残差块1,隐藏层采用膨胀系数依次为2,4,8的空洞卷积的3个残差块2,输出层为全连接层,残差块由两组相同的结构串联,每组结构为卷积、权重归一化、线性修正单元、dropout率为0.2的dropout层,将训练好的模型参数导入时序卷积神经网络。
[0084]
采集信号,采样周期设置为δt,δt是计算cpu负载值时前后采样时刻的时间差,也即是cpu负载的采样周期。一般情况,主流云平台cpu负载的常用采样周期是1min、5min和15min,不失一般性,本发明的采样周期δt设置为常用采样周期之一。以δt采样周期采集训练样本和测试样本,具体为:
[0085]
对信号进行预处理及特征提取,具体为:
[0086]
预处理过程如下:设输入时序卷积神经网络的序列长度为lm,由于第lm个数据点为预测值,因此所述的一定长度为l
m-1,考虑到实际场景中用户请求的规律性,因此lm的值应该使得在δt采样周期下测试样本时间跨度可以覆盖一天,也就是:
[0087][0088]
其中δd是一天的时间,与δt有相同单位,为1440min。
[0089]
训练样本具体处理如下:采集应用服务cpu负载时间范围为tm,为保证有足够的训练样本,tm近似为一般云平台在δt采样周期下cpu负载时序数据的最长保存时间。利用滑窗扫描采集的应用服务cpu负载,每次截取lm长度的数据点作为训练样本,截取完成后滑窗
向后平移δs个点,继续截取训练样本,组成训练样本集,进行训练。本实施例中tm为3个月,δs为5。
[0090]
测试样本具体处理如下:以δt采样周期获取当前时刻往前每δt时间间隔的cpu负载值作为测试样本,测试样本长度为l
m-1,通过末尾使用0值进行补充的方式,使测试样本长度扩充为lm。
[0091]
特征提取过程为:
[0092]
生成周期注意力向量atten
season
:对输入的lm长度数据点的时序数据data,截取前面l
m-1个数据点进行处理,通过自相关系数公式计算时序数据的自相关向量,取非0下标的最大自相关值的下标作为时序数据的周期t,生成周期注意力向量atten
season

[0093]
且t≠t0;
[0094]
其中t是整数,t0是第lm个数据点,控制周期注意力向量的高亮区间长度为总长度的8%,σ2是周期注意力向量分布的离散度,考虑到正态分布3σ原则,因此至少要大于3σ长度,这样才能保证注意力向量在区间内包括了足够多的注意力数值的可能取值,t

=t0-n*t,n=0,1,2

,。
[0095]
峰值注意力向量atten
peak
:对输入的lm长度数据点的时序数据data,截取前面l
m-1个数据点计算峰值,得到归一化峰值注意力向量atten
peak

[0096][0097]
其中,当t=1时和t=lm的时候,atten
peak
由0值进行补充,s是归一化操作,目的是避免峰值向量的值过高或过低:
[0098][0099]
将原始训练样本、周期注意力向量和峰值注意力向量进行加权求和,得到最终输入信号,作为时序神经网络的输入,以训练样本第lm个点为标签值,对时序神经网络进行训练。
[0100]
将原始测试样本、周期注意力向量和峰值注意力向量进行加权求和,得到最终输入信号,作为训练好的时序神经网络的输入,输出下一个采样周期的预测值。
[0101]
s2根据单一应用服务的任务相似性及cpu负载的预测值,获得下一个采样周期内到达的任务数量,应用服务的任务最大延迟,并为系统容器数量设置阈值;
[0102]
所述单一应用服务的任务相似性具体是指单一任务的处理流程和处理时间相似。
[0103]
进一步,s2.1所述采样周期是δt,单一应用服务任务平均执行时间为cpu负载定义是该采样周期内用户态时间和内核态时间的加和与总时间的比值:
[0104][0105]
其中utime是此时用户态消耗时间,stime是此时内核态消耗时间,lastutime是δ
t前用户态消耗时间,laststime是δt前内核态消耗时间。
[0106]
根据上述定义,设预测的下一个采样周期内cpu负载为则到达的任务数量是:
[0107][0108]
s2-2中,所述应用服务的任务最大延迟是delay
max
,所述系统容器数量阈值设置为上下阈值,上阈值是系统容器最大数量pod-max,下阈值是系统容器最小数量pod-min。
[0109]
所述步骤s2-2中,考虑到服务可用性,系统容器最小数量pod-min应当为1,避免任务到达时无可提供服务的容器导致服务失败。系统容器最大数量pod-max受集群cpu资源r
cap
和单容器cpu资源占用r
req
决定,应当满足如下公式:
[0110][0111]
在本实施例中,所述应用服务的任务最大延迟是120s,所述集群cpu资源r
cap
为24,单容器cpu资源占用r
req
为3,pod-min为1,pod-max为8,所述δt为5min,为4.0s。
[0112]
s3以采样周期为单位时间间隔,构建定长服务m/d/1模型,根据m/d/1模型的服务强度计算系统忙期时长;该定长服务排队模型的优化目标为容器数量最少,同时,满足系统忙期时长小于任务最大延迟,以及排队系统能趋于稳定状态等约束条件的具体流程如下:
[0113]
s3-1、所述一定采样周期为δt,定长服务m/d/1排队模型的服务能力为:
[0114][0115]
其中,是任务平均执行时间。
[0116]
定长服务m/d/1排队模型的任务到达率为:
[0117][0118]
其中,xv是下一个采样周期内到达的任务数,nv是下一个采样周期的容器数量。
[0119]
定长服务m/d/1排队模型的服务强度为:
[0120]
ρ=λ/μ
[0121]
定长服务m/d/1排队模型的忙期时长为:
[0122]
δt
busy
=ρ*δt
[0123]
s3-2、所述优化目标和约束为:
[0124]
minimize(nv),
[0125]
s.t.δt
busy
<delay
max
且ρ<1
[0126]
其中,nv是下一个采样周期容器数量,δt
busy
是步骤s3-1的忙期时长,delay
max
是任务最大延迟,ρ是服务强度。
[0127]
在本实施例中,所述步骤s3-1中,δt为5min,为4.0s。
[0128]
在本实施例中,所述步骤s3-2中,delay
max
为120s。
[0129]
s4采用遍历法搜索定长服务m/d/1模型优化目标的最优解,作为系统下一个采样周期的最优容器数量,通过程序调用对容器扩缩容的kubernetes shell命令将应用服务的
容器数量扩缩容到最优数量。
[0130]
具体流程包括:
[0131]
s4-1遍历法是将容器数量从容器下阈值遍历至容器上阈值,如果满足服务强度小于1且忙期时长小于任务最大延迟,则退出循环,取此时的容器数量为下一个采样周期最优容器数量。
[0132]
实现过程如下:
[0133]
输入:下一个采样周期的cpu负载值;任务平均执行时间任务最大延迟delay
max
,容器数量上阈值pod-max,容器数量下阈值pod-min。
[0134]
1)初始化:
[0135]
设置单任务执行时间服务能力采样周期设置为δt。
[0136]
2)决策过程:
[0137]nv
设置为pod-min,执行:
[0138]
a)根据cpu负载定义和任务平均执行时间计算任务数量xv,根据容器数量nv计算任务到达率计算服务强度和忙期时长δt
busy
=ρ*δt。
[0139]
如果ρ<1且δt
busy
<delay
max
,执行:
[0140]
pod-optimal=nv(t)
[0141]
跳转到2.b。
[0142]
否则,执行:
[0143]
如果nv==pod-max,执行:
[0144]
pod-optimal=nv[0145]
跳转到2.b。
[0146]
否则,执行:
[0147]nv
=nv 1,
[0148]
重复2.a。
[0149]
b)输出:pod-optimal。
[0150]
s4-2、所述通过程序调用对容器扩缩容的kubernetes shell命令将应用服务的容器数量扩缩容到最优数量,是通过高级编程语言通过调用进程库创建进程的方式,执行对容器扩缩容的kubernetes shell命令。
[0151]
在本实施例中,通过高级编程语言通过进程库创建进程的方式,执行对容器扩缩容的kubernetes shell命令。
[0152]
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受所述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献