基于趋势预测的微服务实例动态水平扩展收缩方法及系统与流程

文档序号:32346581发布日期:2022-11-26 11:32阅读:65来源:国知局
基于趋势预测的微服务实例动态水平扩展收缩方法及系统与流程

1.本公开属于云计算技术领域,尤其涉及一种基于趋势预测的微服务实例动态水平扩展收缩方法及系统。


背景技术:

2.本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。
3.随着云计算的快速发展,在云平台中基于微服务架构开发部署业务系统逐渐成为潮流。微服务架构将传统的单体应用拆分为独立的子系统,降低了功能模块之间的耦合度。容器技术将微服务及其依赖环境打包为镜像,通过镜像仓库共享镜像并下载运行,减少了微服务的成本,提高了开发部署的灵活性。随着微服务架构中的容器数量不断增加,以kubernetes(k8s)最为代表的容器云平台应运而生,云平台可以在集群中对容器进行调度和管理,其中平台级项目必备的一个编排能力就是实现微服务实例的“水平扩展/收缩”(即根据负载的真实水平调整微服务实例的数量),可以随着业务系统的真实负载,增加或者删除微服务实例的个数,在保证服务质量的同时,实现了资源的按需分配。
4.发明人发现,现有的实现微服务实例“水平扩展/收缩”最基本的手段就是运维人员根据业务系统对未来进行合理规划,手动设定实例数量,采用这种人工预测的方式,会因为运维人员能力存在差异和业务系统复杂程度的不同,导致结果往往不尽如人意;除了这种人工预测方法外,也可以通过设定特定资源阈值的方式实现响应式伸缩,比如对微服务实例的cpu使用率设定阈值,当超过这个阈值时,就自动增加实例数量,来增加整体的服务负载能力,但是此类方式的调度存在滞后性,只有当阈值达到时动态伸缩才会发生,导致增加服务响应时间,浪费系统资源等问题。


技术实现要素:

5.本公开为了解决上述问题,提供了一种基于趋势预测的微服务实例动态水平扩展收缩方法及系统,所述方案通过采集特定的负载指标,使用指标预测出负载的趋势特征,在负载高峰低谷到来前提前实现微服务实例的水平扩展/收缩,具有更好的前瞻性和灵活度;同时,所述方案在保证微服务服务质量的同时,可以更加高效的利用系统资源。
6.根据本公开实施例的第一个方面,提供了一种基于趋势预测的微服务实例动态水平扩展收缩方法,包括:
7.基于exporter进程周期性的获取云平台内宿主机和微服务实例的负载指标;其中,所述exporter进程为存在于宿主机和微服务实例中的指标收集进程,并对外提供指标数据接口;
8.将获得的负载指标按照时序存储于时序数据库中;
9.基于所述时序数据库中的负载指标,利用预先构建的负载趋势预测模型获得相应服务的负载趋势;
10.基于获得的负载趋势,实现微服务实例的扩展或收缩。
11.进一步的,所述负载指标包括宿主机的硬件指标、微服务实例所在容器的负载使用率以及体现服务相应能力的应用层负载指标。
12.进一步的,所述宿主机的硬件指标及微服务实例所在容器的负载使用率,具体包括cpu使用率、内存使用率以及网络io;所述体现服务相应能力的应用层负载指标包括每秒查询数以及响应时间。
13.进一步的,所述exporter进程为一个与相关微服务一起部署的api服务,对内收集负载指标,对外向指标监控组件提供查询接口。
14.进一步的,所述负载趋势预测模型采用多个时间序列预测算法组成的混合模型,具体由holt-winters、arima以及stl模型组成。
15.进一步的,所述负载趋势预测模型的训练,具体为:
16.基于预先获得的历史负载指标数据构建训练集;
17.基于所述训练集分别对若干时间序列预测模型进行训练;
18.基于smape算法对若干时间序列预测模型的训练结果进行评价,从中选择最优的模型作为最终的负载趋势预测模型。
19.根据本公开实施例的第二个方面,提供了一种基于趋势预测的微服务实例动态水平扩展收缩系统,包括:
20.数据获取单元,其用于基于exporter进程周期性的获取云平台内宿主机和微服务实例的负载指标;其中,所述exporter进程为存在于宿主机和微服务实例中的指标收集进程,并对外提供指标数据接口;
21.数据存储单元,其用于将获得的负载指标按照时序存储于时序数据库中;
22.负载趋势预测单元,其用于基于所述时序数据库中的负载指标,利用预先构建的负载趋势预测模型获得相应服务的负载趋势;
23.微服务实例扩展或收缩控制单元,其用于基于获得的负载趋势,实现微服务实例的扩展或收缩。
24.根据本公开实施例的第三个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上运行的计算机程序,所述处理器执行所述程序时实现所述的一种基于趋势预测的微服务实例动态水平扩展收缩方法。
25.根据本公开实施例的第四个方面,提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述的一种基于趋势预测的微服务实例动态水平扩展收缩方法。
26.与现有技术相比,本公开的有益效果是:
27.(1)本公开提供了一种基于趋势预测的微服务实例动态水平扩展收缩方法及系统,所述方案通过采集特定的负载指标,使用指标预测出负载的趋势特征,在负载高峰低谷到来前提前实现微服务实例的水平扩展/收缩,具有更好的前瞻性和灵活度;同时,所述方案在保证微服务服务质量的同时,可以更加高效的利用系统资源。
28.(2)本公开所述方案在通过指标数据进行趋势预测的过程中,通过结合holt-winters、arima和stl三种算法,并对训练过程进行合理优化,得到一个最优的预测模型;上述所选择的这三种算法在使用场景和优缺点上实现了相互补充,各自拟合出的预测数据会
进一步的进行相关校验,保证预测的尽可能准确。
29.本公开附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本公开的实践了解到。
附图说明
30.构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
31.图1为本公开实施例中所述的基于趋势预测的微服务实例动态水平扩展收缩方法流程示意图;
32.图2为本公开实施例中所述的指标收集流程图;
33.图3为本公开实施例中所述的预测模型训练过程示意图。
具体实施方式
34.下面结合附图与实施例对本公开做进一步说明。
35.应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
36.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
37.在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
38.实施例一:
39.本实施例的目的是提供一种基于趋势预测的微服务实例动态水平扩展收缩方法。
40.一种基于趋势预测的微服务实例动态水平扩展收缩方法,包括:
41.基于exporter进程周期性的获取云平台内宿主机和微服务实例的负载指标;其中,所述exporter进程为存在于宿主机和微服务实例中的指标收集进程,并对外提供指标数据接口;
42.将获得的负载指标按照时序存储于时序数据库中;
43.基于所述时序数据库中的负载指标,利用预先构建的负载趋势预测模型获得相应服务的负载趋势;
44.基于获得的负载趋势,实现微服务实例的扩展或收缩。
45.进一步的,所述负载指标包括宿主机的硬件指标、微服务实例所在容器的负载使用率以及体现服务相应能力的应用层负载指标。
46.进一步的,所述宿主机的硬件指标及微服务实例所在容器的负载使用率,具体包括cpu使用率、内存使用率以及网络io;所述体现服务相应能力的应用层负载指标包括每秒查询数以及响应时间。
47.进一步的,所述exporter进程为一个与相关微服务一起部署的api服务,对内收集负载指标,对外向指标监控组件提供查询接口。
48.进一步的,所述负载趋势预测模型采用多个时间序列预测算法组成的混合模型,具体由holt-winters、arima以及stl模型组成。
49.进一步的,所述负载趋势预测模型的训练,具体为:
50.基于预先获得的历史负载指标数据构建训练集;
51.基于所述训练集分别对若干时间序列预测模型进行训练;
52.基于smape算法对若干时间序列预测模型的训练结果进行评价,从中选择最优的模型作为最终的负载趋势预测模型。
53.具体的,为了便于理解,以下结合附图对本实施例所述方案进行详细说明:
54.基于现有技术存在的问题,本实施例提供了一种基于趋势预测的微服务实例动态水平扩展收缩方法,如图1所示为基于趋势预测的自动水平扩展/收缩的微服务架构的整体概览图,与普通的微服务部署相比,区别在于增加了一个负载趋势预测模块,而这个模块基于的数据来自于指标收集模块收集到的存在于时序数据库中的指标数据。而指标收集模块通过服务发现模块获得具体微服务实例的访问路径。负载趋势预测模块预测到特定趋势后,就会通过实例控制器动态实现微服务实例的水平扩展/收缩。基于此可以发现,本实施例所述方案的关键点有两个,一是需要定义如何收集可以影响到实例扩展/收缩的负载指标,二是采用怎样的算法来训练出最佳的预测模型。
55.首先,如附图2所示,为指标收集流程图,其中的exporter是存在于宿主机和微服务实例中的指标收集进程,这些exporter进程向内收集所在宿主机和微服务实例的负载指标,向外提供api接口暴露指标数据,供指标收集模块采集,指标收集模块最后将数据存入时序数据库中。exporter进程一个跟相关微服务一起部署的一个api服务,对内收集指标,对外向prometheus这种指标监控软件提供查询接口。其在以prometheus为代表的指标监控软件中这种设计思想被广泛使用,可以通过微服务供应商或者开源社区获取对应的exporter进程。
56.对于负载指标的定义,主要分为两类,其一是宿主机的硬件指标和实例所在容器的负载使用率。采集的负载指标通常包括cpu使用率、内存使用率和网络io等,不同的微服务实例的这些基础负载指标应该定义为相同的。其二是体现服务响应能力的应用层负载指标,例如每秒查询数(query per second,qps)、响应时间(response time,rt)等,这些服务层的负载指标因服务类型不同而不同。
57.有了可以进行趋势预测的具体指标,下一步就是确定根据负载指标判断微服务实例是否需要水平扩展/收缩的具体算法。如图3所示,为趋势预测模型训练过程图,其中的历史数据便是上一步我们采集到的那些负载指标数据,这些负载指标,大部分是平稳的时间序列数据或者可以转换为平稳的时间序列数据,我们可以基于时序数据采用一些特定算法训练出一个最优模型,便可以进行有效的预测。
58.如趋势预测模型训练过程图所展示的,我们主要结合了三种时间序列预测算法,即holt-winters、arima(autoregressive integrated moving average)以及stl(seasonal-trend decomposition using loess);具体的:
59.holt-winters是一种时间序列分析和预报方法。该方法可以用于预测含有线性趋势和周期波动的非平稳序列,利用指数平滑法(ema)让模型参数不断适应非平稳序列的变化,拟合出针对趋势性和周期性的预测函数,并对未来趋势进行预报。
60.arima模型的预测原理是分析输入的时序序列自身,提取序列中所有相关性的信息来拟合函数,并用该函数进行预测。arima(p,d,q)模型是arma(p,q)模型的扩展,而arma则是ar模型和ma模型的结合,其中,ar(p)模型,全称是p阶回归模型;ma(q)模型,全称是q阶移动平均模型;arma模型,全称是自回归移动平均模型。在arma的基础上使预测成为平稳序列需要进一步做差分,进而最终得到arima。
61.stl(seasonal and trend decomposition using loess)是一个非常通用和稳健的分解时间序列的方法,stl可以对季节因子和趋势因子都进行了局部多项式回归。其中loess(locally weighted scatterplot smoothing,lowess or loess)为局部多项式回归拟合,是对两维散点图进行平滑的常用方法,它结合了传统线性回归的简洁性和非线性回归的灵活性。当要估计某个响应变量值时,先从其预测变量附近取一个数据子集,然后对该子集进行线性回归或二次回归,回归时采用加权最小二乘法,即越靠近估计点的值其权重越大,最后利用得到的局部回归模型来估计响应变量的值。用这种方法进行逐点运算得到整条拟合曲线。
62.本实施例所述方案中的趋势预测在算法选择上不存在“银弹”,所选择的这三种算法在使用场景和优缺点上实现了相互补充,各自拟合出的预测数据会进一步的进行相关校验,保证预测的尽可能准确。
63.整体的训练流程是设定一些定时任务,同时对holt-winters、arima和stl三个算法进行训练,将2/3的历史数据作为训练数据,将1/3的数据作为测试数据。针对每一种算法循环传入一些特定参数,对每种算法的每一个参数都训练得到模型,然后使用smape(symmetric mean absolute percentage error)作为模型的评价,这样我们就最终得到一个最优模型,然后就可以基于此模型进行趋势预测。
64.其中,smape是一种基于百分比(或相对)误差的准确度度量方法,我们使用它来作为预测评价指标。通俗的讲,准确度度量就是基于预测数值和准确数值的偏差进行评判模型的优劣。而对预测模型的评价最可靠的数据自然是已经获得的真实时序数据,我们可以把历史时序数据分成两部分,一部分用来训练模型,另一部分用来检验模型。如果我们有4周(28天)的数据,我们使用前3周(前21天)的数据用来调整算法训练模型,再用模型逐步预测最后7天的数据,最好采用滚动预测的方法,每次预测前进一天,总共可以进行7次模拟检验,通过这种检验方式,最终得到一个最优的预测模型。
65.进一步的,如果我们采集到的负载指标数据量足够大的话,也可以选择训练类似rnn、lstm这样的神经网络模型,供预测使用。
66.到此为止,我们就能做到基于历史负载指标数据,预测出相应服务的负载趋势,根据具体趋势就可以很直观的做出扩展还是收缩的决定,而这些决定通过实例控制器模块来最终实现。
67.以上就是整个基于趋势预测来自动做到微服务实例水平扩展/收缩的全过程,其中有两个关键技术点:一是我们需要定义真正能反应出微服务真实负载水平的指标数据,包括宿主机和微服务实例层面的,也包括物理资源和应用层指标层面的,然后我们通过指标收集模块将这些时序数据收集到数据库,待下一步预测使用。二是选择合适的算法训练出准确度高的预测模型,然后使用上一步的指标数据进行负载的趋势预测,根据对未来的预测来提前实现实例的扩展/收缩。
68.实施例二:
69.本实施例的目的是提供一种基于趋势预测的微服务实例动态水平扩展收缩系统。
70.根据本公开实施例的第二个方面,提供了一种基于趋势预测的微服务实例动态水平扩展收缩系统,包括:
71.数据获取单元,其用于基于exporter进程周期性的获取云平台内宿主机和微服务实例的负载指标;其中,所述exporter进程为存在于宿主机和微服务实例中的指标收集进程,并对外提供指标数据接口;
72.数据存储单元,其用于将获得的负载指标按照时序存储于时序数据库中;
73.负载趋势预测单元,其用于基于所述时序数据库中的负载指标,利用预先构建的负载趋势预测模型获得相应服务的负载趋势;
74.微服务实例扩展或收缩控制单元,其用于基于获得的负载趋势,实现微服务实例的扩展或收缩。
75.进一步的,本实施例所述系统与实施例一中所述方法相对应,其技术细节在实施例一中已经进行了详细说明,故此处不再赘述。
76.在更多实施例中,还提供:
77.一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成实施例一中所述的方法。为了简洁,在此不再赘述。
78.应理解,本实施例中,处理器可以是中央处理单元cpu,处理器还可以是其他通用处理器、数字信号处理器dsp、专用集成电路asic,现成可编程门阵列fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
79.存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据、存储器的一部分还可以包括非易失性随机存储器。例如,存储器还可以存储设备类型的信息。
80.一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成实施例一中所述的方法。
81.实施例一中的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
82.本领域普通技术人员可以意识到,结合本实施例描述的各示例的单元即算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
83.上述实施例提供的一种基于趋势预测的微服务实例动态水平扩展收缩方法及系统可以实现,具有广阔的应用前景。
84.以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技
术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1