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

云原生环境下支持服务负载激增预测的容器弹性伸缩系统

2022-06-05 21:30:32 来源:中国专利 TAG:


1.本发明涉及的是一种云计算领域的技术,具体是一种云原生环境下支持服务负载激增预测的容器弹性伸缩系统。


背景技术:

2.根据负载变化自动进行弹性伸缩的系统是云计算领域针对不可估计的负载变化问题进行资源动态分配的系统。现在已经存在的弹性伸缩技术包括采用投机性策略完成弹性伸缩,和采用时间序列分析方法预测负载并预分配资源。预分配资源相对于被动伸缩具有更好的效果,但是当前容器弹性伸缩系统没有考虑服务负载激增的情况,在服务负载激增的情况下,服务依然无法处理激增的负载,从而导致服务崩溃。
3.当前容器弹性伸缩系统计算并行度时根据随着并行度增加处理能力线性变化的假设,但是在实际测试中,随着并行度的增加,服务的处理能力并不是线性变化的,因此出现完成伸缩后资源分配不足或过量的问题,导致系统短期内再次出现伸缩动作,以及后续因系统不稳定出现吞吐量下降的问题。


技术实现要素:

4.本发明针对现有技术存在的上述不足以及在云原生环境实现容器弹性伸缩所面临的问题,提出一种云原生环境下支持服务负载激增预测的容器弹性伸缩系统,在服务负载激增的情况下依然能够为服务预分配合适的资源保证服务的高可用。基于时间卷积神经网络和图嵌入的服务负载预测模型能够提前预测服务负载激增,基于多元线性回归的并行度计算方法能够根据预测负载准确计算出所需容器数量,避免了在服务负载激增情况下服务崩溃以及多次进行伸缩动作导致的系统不稳定问题。
5.本发明是通过以下技术方案实现的:
6.本发明包括:数据采集模块、伸缩模块、策略模块、深度学习模块和数据传输模块,其中:数据采集模块获取服务中每一个容器的使用资源信息并输出至数据传输模块,数据传输模块将使用资源信息以流形式分别输出至深度学习模块和策略模块,深度学习模块使用来自数据传输模块的资源信息训练服务负载预测模型和并行度计算模型,策略模块获取来自数据传输模块的服务历史负载数据,并使用负载激增预测算法调用服务负载预测模型得到预期负载并输出至并行度计算方法,并行度计算方法调用并行度计算模型得到服务所需的容器数量并将结果输出至伸缩模块以对服务进行伸缩。
7.所述的容器是指:容器使用内核轻量级的操作系统层的虚拟化技术,在同一个物理机上可以启动多个容器提供相同的服务。
8.所述的使用资源数据包括:容器相关数据和服务相关数据。
9.所述的容器相关数据包括:每个容器的cpu利用率、内存占用和容器数量。
10.所述的服务相关信息包括:服务负载,请求处理时间。
11.所述的服务负载:每秒钟服务需要处理的请求数量。
12.所述的容器弹性伸缩是指:当服务负载增加时,增加容器的数量,当服务负载减少时,减少容器数量。
13.所述的数据采集模块包括:请求发送单元和数据处理单元,其中:请求发送单元与数据处理单元相连,请求发送单元给服务所在集群发送请求并获取上述资源数据,并将数据传输给数据处理单元,数据处理单元对数据进行预处理后将数据输出至数据传输模块。
14.所述的预处理,包括:删除错误数据以及通过插值法补充缺失数据。
15.所述的数据传输模块采用kafka作为数据传输组件,将数据采集模块采集到的资源数据根据名称发送到kafka对应的数据队列中。
16.所述的数据传输模块包括:数据接收单元、数据队列管理单元和消费者单元,其中:数据接收单元接收来自数据采集模块的使用资源信息,数据队列单元用于获取并管理队列信息并输出至消费者单元,消费者单元循环处理每一条队列信息和使用资源信息,根据数据名称选择相应的队列,并将数据发送到队列中。
17.所述的管理数据队列信息包括:队列名称、队列中数据偏移量信息。
18.所述的队列信息包括:服务负载队列当前的偏移量。
19.所述的深度学习模块包括:数据预处理单元和深度学习算法训练单元,其中:数据预处理单元根据窗口大小进行数据分割,深度学习算法训练单元使用分割后的数据对服务负载预测模型和并行度计算模型进行训练。
20.所述的服务负载预测模型是基于时间卷积神经网络和图嵌入实现的神经网络模型,为了提高在服务负载激增的情况下模型的预测准确率,模型应该更加侧重于处理负载激增时的特征而不是关注所有的数据特征,该服务负载预测模型具体包括:输入层、四个时间卷积网络层、图嵌入网络以及用于将时间卷积网络层输出向量和图嵌入网络输出向量线性融合的全连接网络层,其中:每个时间卷积网络层包含两个隐藏层。
21.所述的时间卷积网络层中设有self-attention模块,该attention模块与tcn网络层组成神经网络模块,并用该模块构造完整的神经网络结构。
22.所述的图嵌入网络:在云原生环境下,服务的负载不仅仅来源于客户端的访问还来自其他的服务的访问,本发明采用node2vec方法将服务依赖图每个节点转化为特征向量,然后通过全连接神经网络将特征向量融合为一个固定长度的向量vector。
23.所述的服务负载激增预测算法包括:首先将获取的服务历史负载信息输入服务负载预测模型得到预测负载,将预测所得负载与原有负载值拼接作为新的负载输入值并输入到服务负载预测模型得到新的预测负载,循环n次取得n个负载值,计算得到n个负载值得方差,根据方差判断为负载激增时返回n个负载值中的最大值,否则返回均值。
24.所述的并行度计算方法为基于多元线性回归的容器数量计算方法,通过所采集的容器数据,训练回归分析模型,用来拟合服务整体处理能力的非线性变化并根据预测负载值计算所需的容器数量。技术效果
25.本发明整体解决了现有技术在服务负载激增时,无法为服务预分配合适的资源数量,导致服务高延迟甚至崩溃或存在多步伸缩的问题。
26.与现有技术相比,本发明结合时间卷积神经网络和服务间依赖信息预测服务负载,并且能够根据服务负载预测值检测负载激增。其次,本发明能够通过并行度计算方法精
确计算容器的并行度,避免了由于多步伸缩导致的系统震荡。
附图说明
27.图1为本发明系统示意图;
28.图2为服务负载预测模型示意图;
29.图3为attention模块结构示意图。
具体实施方式
30.本实施例所用环境为由三台物理主机搭建的kubernetes集群环境,所用微服务测试例为google开源项目microservices-demo,并在集群中部署istio、prometheus和metricserver组件,其中microservices-demo用来验证本发明容器弹性伸缩系统可用性的测试例,其包含多种服务,可直接部署在集群中;istio是一种服务请求监控软件,用于监控测试例microservices-demo中每个服务的请求接收和处理情况;prometheus是时序数据库,并且具有数据拉取功能,prometheus可以拉取istio中临时保存的服务请求情况并存储到本地;metriserver用于监控kubernetes集群,用于获取每个服务所拥有的容器数量以及每个容器的cpu和内存利用率。该组件将按照时间固定的时间间隔采集集群中每个pod的cpu和内存使用量,并将数据临时存储在内存中,等待数据采集模块读取数据。
31.如图1所示,为本实施例涉及一种云原生环境下支持服务负载激增预测的容器弹性伸缩系统,包括:数据采集模块、伸缩模块、策略模块、数据传输模块和深度学习模块,其中:数据采集模块中请求发送单元向prometheus数据库发送http请求,以获取checkoutservice一秒内的请求总数,prometheus数据库接收到该请求之后将会按照prometheus api中的格式返回数据;数据采集模块同时向metricserver数据库发送http请求以获取容器cpu和内存使用率,数据处理单元根据数据格式解析数据,并将数据进行校验后输出至数据传输模块,数据传输模块将采集到数据发送到数据队列中,并采用kafka作为数据传输组件,策略模块内置服务负载激增预测算法、并行度计算方法,负载激增预测算法调用深度学习模块的服务负载预测模型得到预期负载并传给并行度计算方法,并行度计算方法根据预期负载调用并行度计算模型得到所需容器数量并传给伸缩模块,伸缩模块在得到所需的容器数量之后,通过访问kubernetes集群获取服务当前所拥有的容器数量m,然后与n相比较,得到需要增加或者减少的容器数量。
32.在本实施例中为获取服务的请求数量,所述的http请求中query参数为promql语句,具体为:sum(istio_requests_total{destination_app="checkoutservice",destination_service="checkoutserv ice.default.svc.cluster.local"}offset 1s)。
33.所述的数据传输模块中的数据接收单元接收到数据传输模块的数据之后按照kafka组件的要求更改数据格式为《key,value》对的元信息形式,数据队列管理单元访问kafka获取当前kafka中队列的元数据信息并将结果返回给数据接收单元,数据接收单元将数据和队列信息输出至消费者单元,消费者单元获取到数据之后首先连接kafka并创建client,之后将根据数据名称将数据序列化之后发送到kafka中对应的队列中。
34.所述的深度学习模块中的数据预处理单元对来自数据传输模块的数据按照窗口
大小进行分割后输出至深度学习算法训练单元,用于对负载预测模型和并行度计算模型进行训练。
35.所述的策略模块内置服务负载激增预测算法、并行度计算方法,其中:服务负载激增预测算法输入为服务历史负载数据x
t-k
,x
t-k 1
,

,x
t
,然后将数据传给服务负载预测模型并得到预测负载值y
t 1
=f(x
t-k
,x
t-k 1
,

,x
t
),之后将y
t 1
与原有负载数据拼接成x
t-k 1
,x
t-k 2
,

,x
t
,y
t 1
作为新的负载输入到模型中得到预测负载y
t 2
,循环i次,共得到i个预测值,之后取所有预测值的均值和标准差σ,如果标准差σ大于2那么就判定当前存在负载激增,如果存在负载激增,算法返回所有预测值的最大值,如果不是则返回所有负载的均值。服务负载激增预测算法将预测负载值y传输给并行度计算方法,最后得到容器数量n;并行度计算方法根据预测负载准确计算出所需容器数量。
36.如图2所示,所述的服务负载预测模型的结构包括:输入层、四个时间卷积网络层、图嵌入网络以及用于将时间卷积网络层输出向量和图嵌入网络输出向量线性融合的全连接网络层,其中:时间卷积网络层包含两个隐藏层,在相同的时间卷积网络层中每个隐藏层使用相同的paddding。
37.如图3所示,为设置于时间卷积网络层中的self-attention模块,在计算时间卷积网络层中隐藏层向量时,self-attention模块使用f(x),g(x),h(x)三个函数计算k,q,v向量,根据其中k、q向量经过计算得到w矩阵,再使用w矩阵与v向量使用softmax函数计算得到下一层隐藏层向量s,该attention模块与tcn网络层组成神经网络模块,并用该模块构造完整的神经网络结构。
38.所述的服务负载激增预测算法相对于现有容器弹性伸缩系统所用的负载预测算法结合了服务间依赖信息并进行了负载激增检测。本发明中将服务间的依赖关系抽象成有向无环图,并通过图嵌入方法node2vec将图信息转换为向量,并与时间卷积网络相结合预测服务负载,为了进一步检测服务负载激增的情况,本发明在服务负载激增预测算法中采用多步预测方式,预测多个负载并判断是否存在负载激增的情况。本发明并行度计算方法相对于现有基于线性假设的方法能够精确计算容器数量,主要通过多元回归模型拟合服务的处理能力实现精确的并行度计算。
39.与现有容器弹性伸缩系统相比,本发明使用基于回归分析的并行度计算方法拟合服务扩容后服务处理能力的非线性变化,并通过服务负载激增预测算法预测云原生环境下服务可能达到的负载,然后根据所得回归模型计算所需的容器数量。本发明通过拟合服务处理能力的非线性变化,提高容器并行度预测的准确性,系统能够一次将容器数量增加或者收缩到合适的数目,而无需多次扩容,保证了系统的稳定性。而且可以根据用户预设的可利用资源百分比计算所需的容器数量,提高资源的利用率。在服务负载激增的情况下,经过结构优化的服务负载模型预测的负载值传给并行度计算方法进行计算,计算所得的容器数量在实际测试中能够处理激增后的服务负载,不会出现服务请求高延迟的情况,该发明保证了在服务负载激增的情况下服务的可用性。
40.经过具体实际实验,在云原生环境下,对历史负载进行分析后采用30s的历史负载长度,设置负载预测长度为5s。在使用worldcup数据集测试系统后,服务负载预测误差为0.03,负载激增时的误差为0.09。在负载激增情况下,本发明弹性伸缩系统保证服务了服务可用性,且没有出现资源过量分配的现象。
41.与现有技术相比,本发明在服务负载激增的情况下,保证服务的可用性。本发明中服务伸缩时只需要一次伸缩动作,不会出现由于过量分配资源或资源分配不足导致的多次伸缩情况。
42.上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。
再多了解一些

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

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

相关文献