CN116980316A - 面向时延和资源利用率的微服务弹性伸缩调度方法和系统 - Google Patents

面向时延和资源利用率的微服务弹性伸缩调度方法和系统 Download PDF

Info

Publication number
CN116980316A
CN116980316A CN202310888466.9A CN202310888466A CN116980316A CN 116980316 A CN116980316 A CN 116980316A CN 202310888466 A CN202310888466 A CN 202310888466A CN 116980316 A CN116980316 A CN 116980316A
Authority
CN
China
Prior art keywords
service
micro
time
throughput
api interface
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310888466.9A
Other languages
English (en)
Inventor
刘发贵
曾鼎皓
徐地石
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
South China University of Technology SCUT
Original Assignee
South China University of Technology SCUT
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by South China University of Technology SCUT filed Critical South China University of Technology SCUT
Priority to CN202310888466.9A priority Critical patent/CN116980316A/zh
Publication of CN116980316A publication Critical patent/CN116980316A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/14Network analysis or design
    • H04L41/147Network analysis or design for predicting network behaviour
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0876Network utilisation, e.g. volume of load or congestion level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Environmental & Geological Engineering (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了面向时延和资源利用率的微服务弹性伸缩调度方法和系统。所述方法包括以下步骤:实时统计并在数据库中存储调用链各微服务对应的各API接口的吞吐量和执行时间,各微服务运行中状态和可运行状态的容器数,以及服务依赖关系;给出面向用户微服务的各API接口吞吐量的单步和多步预测区间上界;根据单步和多步预测结果及数据库信息,计算各微服务当前时刻需要在运行中状态和可运行状态之间切换的容器实例数量及需要创建或终止的容器实例数量;基于贝叶斯优化选择Kubernetes调度插件的权重,完成容器实例调度后重新实时监控链路。相比于现有技术,本发明能降低时延和提高资源利用率。

Description

面向时延和资源利用率的微服务弹性伸缩调度方法和系统
技术领域
本发明涉及计算机应用技术领域,尤其涉及面向时延和资源利用率的微服务弹性伸缩调度方法和系统。
背景技术
如今流行的微服务架构是一种用于构建应用程序的延迟敏感的软件设计架构,它将一个大型的单体应用程序拆分为一组小型、自治的服务,而服务间通过API接口进行通信。微服务架构鼓励尽量将状态从服务中移除,使其成为无状态的服务,以便更容易实现服务的复制和扩展。容器化技术是实现微服务分发与部署的常用技术手段。在微服务应用中,用户请求的并发量通常会在短时间内发生剧烈变化,其可能存在不固定频率的上升或下降。当用户请求的并发量激增时,微服务应用集群可能会达到性能瓶颈,导致大量的用户请求排队等候空闲容器线程,造成响应时延升高,从而影响服务质量(Quality of Service,QoS)、违反服务品质保障协议(Service-Level Agreement,SLA);当用户请求并发量下降时,大量已经被分配集群资源的微服务实例可能出现空闲情况,资源利用率过低从而造成集群资源的浪费。为了在保证服务质量的前提下提高微服务集群资源利用率,需要在不中断服务的情况下对服务进行弹性伸缩和调度。
在资源伸缩方面,现有技术可以分为两类。一类是通过横向伸缩,即增加或减少某个微服务的容器实例数;另一类是通过纵向伸缩,即统一增加或减少某一微服务所有容器实例的CPU或内存等的分配量。采用横向伸缩技术的典型代表如文献“微服务自动伸缩系统、方法及相应设备和存储介质(CN112291104A)”,该文献采用了Kubernetes默认的横向自动伸缩器HPA(Horizontal Pod Autoscaler)基于监控指标的阈值设置进行横向伸缩,但是这样的方法会频繁地创建和删除容器实例,没有充分考虑微服务容器实例创建时对应的冷启动过程所消耗的大量时间和资源成本,这些成本体现在冷启动过程中的实例镜像的拉取、实例容器的创建、实例应用的初始化等方面,频繁的冷启动过程会显著提高微服务应用响应延迟、在不处理用户请求的情况下消耗额外的网络与CPU资源,故此类方法难以有效降低时延并且还会造成资源浪费。而另一类采用纵向伸缩技术的典型代表如文献“具有QoS保证的实用高效的微服务自动伸缩策略(Hossen M R,Islam M A,Ahmed K.Practicalefficient microservice autoscaling with QoS assurance[C]//Proceedings of the31st International Symposium on High-Performance Parallel and DistributedComputing.2022:240-252.)”,该文献首先为所有微服务分配充足的资源以满足SLO而后尝试利用纵向伸缩减少分配的CPU、内存等资源,但是这样的方法没有考虑到资源碎片的情况,因为其需要先验设定固定的资源上界与下界,并且通常需要同一个微服务的所有容器实例副本具有相同的资源限制与需求。无法为每一个实例制定不同的资源限制与需求。所以当大部分微服务实例的资源用量均降低了一个很小的数值,而实例总资源却大于设定的下界时,虽然释放资源提高了实例本身的资源利用率,但是这些释放出来的资源都是以碎片化的形式分布在集群的各个虚拟机节点上,难以加以利用,故此类方法不能很好地提高资源利用率。
在容器实例调度方面,现有技术如文献“基于微服务链路分析和强化学习的调度方法及装置(CN114780233A)”,以及文献“关于大规模的共享容器集群中长时间运行的应用程序的调度研究(Wang L,Weng Q,Wang W,et al.Metis:Learning to schedule long-running applications in shared container clusters at scale[C]//SC20:International Conference for High Performance Computing,Networking,Storageand Analysis.IEEE,2020:1-17.)”,均不会变更容器调度执行前后的集群节点状态,即使某个节点所有容器实例均被终止也会依旧运行该节点,故此类方法不能最大化资源利用率。
发明内容
本发明的目的至少通过如下技术方案之一实现。
面向时延和资源利用率的微服务弹性伸缩调度方法,包括以下步骤:
S1、实时统计并在数据库中存储调用链上的各个微服务对应的各个API接口的吞吐量和执行时间,各微服务运行中状态和可运行状态的容器数,以及服务依赖关系;
S2、基于区间预测算法,单步和多步预测算法,以及吞吐量数据预处理模型给出面向用户的微服务的各API接口吞吐量的单步和多步预测区间上界;
S3、根据单步和多步预测结果及数据库中存储的信息,计算各微服务在当前时刻需要在运行中状态和可运行状态之间切换的容器实例数量及需要创建或终止的容器实例数量;
S4、基于贝叶斯优化选择Kubernetes调度插件的权重并完成容器实例调度,完成实例调度后重新开始步骤S1。
进一步地,步骤S1中,所述吞吐量指利用分布式链路追踪系统收集到的span数据中,指定单位时间范围内所有有效请求的数量,若span的开始和结束时间与指定的单位时间范围有交集,则认为该记录代表了一个指定单位时间范围内的有效请求;
所述执行时间指是在服务端测量的完成服务请求所需的处理时间;
所述运行中状态指微服务的容器实例处于处理用户请求的状态,在此状态的实例可以被其他微服务容器实例调用以共同处理用户请求并且占用CPU时间;
所述可运行状态指微服务的容器实例处于服务端口被隐藏、不处理用户请求的状态,在此状态的实例不占用CPU时间,并且其内存页被交换到磁盘上的交换空间中,以释放物理内存;
所述服务依赖关系指分布式链路追踪系统收集到的不同服务的API接口之间的相互依赖关系和调用数据,包括各微服务API接口在完成其自身一次调用过程中所调用其他微服务API接口的平均次数。
进一步地,步骤S2具体包括以下步骤:
S2.1、基于区间预测算法EnbPI和单步预测算法SVR在线分别求取面向用户的调用链中第一个微服务对应的各个API接口的吞吐量单步预测区间上界;
区间预测算法EnbPI(Ensemble batch prediction intervals)是一种不假设时间序列的数据分布、适用于非平稳时间序列、需要与底层回归算法搭配使用的先进单步区间预测算法,用于在线推理得出根微服务API接口吞吐量的单步预测区间;支持向量机回归(SVR)是一种经典的使用核函数来进行非线性映射的单步预测算法,在单步区间预测的过程中SVR的模型对象和给定的期望置信水平α一起作为参数被传入EnbPI的模型对象,因此EnbPI的模型对象即单步区间预测的模型对象,其中,定义往单步区间预测的模型对象传入的期望置信水平为α,表示期望的未来实测吞吐量不超过单步区间预测上界的概率为(1+α)/2,其中α∈[0,1];
定义调用链中第一个微服务对应的API接口个数为R,则共有R个单步区间预测模型对象与第一个微服务对应的R个API接口分别一一对应,其中第r个API接口的单步区间预测模型对象的具体训练与推理步骤如下;
针对单步区间预测模型的训练,采用每隔y步更新一次的在线训练方式,单步区间预测模型对象每次在线训练更新所用的输入数据是最近n步时间窗口内调用链第一个微服务对应的第r个API接口原始吞吐量训练样本集合Ctrain={λ1,r,t-n+1,λ1,r,t-n+2,...,λ1,r,t},其中λ1,r,t表示当前t时刻所述调用链第一个微服务第r个API接口的原始吞吐量数据,其中y<n,以保证模型对实时产生的新样本具有良好的适应性;
针对单步区间预测模型的推理,采用实时输出下一个时间步吞吐量预测上界的在线推理方式,单步区间预测模型对象在线推理所用的输入数据是最近h步时间窗口内调用链第一个微服务对应的第r个API接口吞吐量推理样本集合为Cpredict={λ1,r,t-h+1,λ1,r,t-h+2,...,λ1,r,t},其中h<y<n,单步区间预测模型在线推理的输出是微服务应用吞吐量关于t+1时刻的单步预测区间为其中/>是预测区间的下界、是预测区间的上界;定义所需求取的调用链第一个微服务对应的第r个API接口关于t+1时刻的吞吐量单步预测区间上界为/>的值即为/>
S2.2、利用由线性回归算法、带上界保护的移动平均平滑化法和指数加权移动平均构成的预处理模型来平滑化调用链中第一个微服务对应的各个API接口的吞吐量数据,得到适合用于多步预测、有助于减少多步区间预测多步累计预测误差的处理后的时间序列数据;
共有R个预处理模型与步骤S2.1中的调用链第一个微服务对应的R个API接口分别一一对应,其中调用链第一个微服务对应的第r个API接口的预处理模型对象的具体数据处理步骤如下;
定义预处理模型的数据处理间隔为a,则预处理模型每隔a个时间步处理对应的API接口吞吐量数据,其中a是大于2的正整数,定义t时刻对应API接口的预处理模型中的带上界保护的移动平均平滑化法输入的吞吐量样本数为wt,在计算wt的过程中,需要在线选出当前t时刻之前W个对应API接口吞吐量数据样本集合D1={λ1,r,t-W+1,λ1,r,t-W+2,...,λ1,r,t},其中W为一个正整数超参数;
具体地,首先以时间为自变量、吞吐量为因变量对D1进行线性回归拟合,得到线性回归拟合直线的斜率为A;接下来,对线性回归拟合得到的斜率系数绝对值|A|进行缩小或放大,得到反映D1时间序列内吞吐量的上升或下降情况的波动趋势因子ξ,计算公式如下:
ξ=ρ*|A| (1)
其中,ρ为一个大于0的超参数,用于缩放线性回归拟合得到的斜率绝对值|A|;
定义带上界保护的移动平均平滑化法的最多输入吞吐量样本数为Wmax,令Wmax的值为W;定义带上界保护的移动平均平滑化法的最少输入吞吐量样本数为Wmin,其中,0<Wmin<Wmax;根据波动趋势因子ξ的大小得到wt为:
其中,若ξ为0,说明没有测量到时间序列数据的上升或下降趋势,此时预处理模型的输入为最大吞吐量样本数Wmax;若ξ大于0,说明D1中存在上升或下降的趋势,随着ξ的增大而减少输入吞吐量样本数可以让多步区间预测算法更好地捕捉最近的趋势从而减少多步区间预测多步累计预测误差,其中如果Wmax*(1-ξ)为小数就向上取整,而预处理模型的输入吞吐量样本数最少可减至Wmin
根据以上计算所得的wt选取t时刻待指数加权移动平均处理的吞吐量数据样本集合按以下公式对D2进行带上界保护的移动平均平滑处理,计算用于t时刻指数加权移动平均(EWMA)算法平滑化处理的数据点/>
其中,G是[1,3]范围内的超参数,σ为D2的标准差,假设吞吐量数据服从正态分布,均值正负G倍标准差的概率为β,则不超过均值加上G倍标准差的概率即为(1+β)/2,据此可以提取出D2时间序列的波动信息,在平滑数据的同时提供上界保护,减小多步预测结果低估吞吐量的概率以降低时延;
定义t时刻调用链第一个微服务对应的第r个API接口对应的预处理模型输出的吞吐量平滑值为∈1,r,t,对进行指数加权移动平均处理,计算公式如下:
其中,F和E分别为指数加权移动平均的固定权重超参数和指数权重超参数;
S2.3、基于多步预测算法Prophet分析预处理后的时间序列数据,在线求取面向用户的调用链第一个微服务对应的各个API接口吞吐量的多步预测区间上界;
共有R个多步预测算法Prophet的模型对象与步骤S2.1中调用链第一个微服务对应的R个API接口分别一一对应;
其中调用链第一个微服务对应的第r个API接口的多步区间预测模型对象的具体推理步骤如下;
多步预测算法Prophet模型对预处理后的时间序列数据进行在线处理,模型参数中的期望置信水平为χ,其中χ∈[0,1];每隔a步将对应API接口最近b次平滑化处理后的值集合Pin={∈1,r,t-a*(b-1),∈1,r,t-a*(b-2),...,∈1,r,t}输入到多步预测算法的模型对象,输出对应API接口的未来多步吞吐量预测区间上界集合 其中a即步骤S2.2中的预处理模型的数据处理间隔,并且b>a;定义所需求取的调用链第一个微服务对应的第r个API接口的关于t+m时刻的吞吐量多步预测区间上界为/>其中m∈{a,2a,...,a2}。
进一步地,步骤S3具体包括以下步骤:
S3.1、根据单步预测结果、多步预测结果、服务依赖关系和各微服务API接口吞吐量数据,计算各微服务API接口在当前t时刻关于t+1时刻的吞吐量集合和执行时间估计值集合/>以及关于t+m时刻的吞吐量估计值集合/>和执行时间估计值集合其中,每个时间步均进行/>和/>的计算,每隔a个时间步进行一次/>的计算,如果当前t时刻不需要计算/>则步骤S3.1中将只计算其中a即步骤S2.2中的预处理模型的数据处理间隔;
用最小二乘法根据三次多项式目标函数拟合各微服务API接口历史吞吐量数据和执行时间数据之间的关系;定义调用链中微服务个数为I;定义从调用链入口的第一个微服务开始递推的第i个微服务对应的API接口个数为Ji;定义调用链第i个微服务对应的第j个API接口的吞吐量为λi,j、执行时间为τi,j;定义t时刻调用链第i个微服务对应的第j个API接口的吞吐量为λi,j,t、执行时间为τi,j,t,定义t时刻调用链第i个微服务对应的第j个API接口用于三次多项式拟合的数据样本点集合为Θi,j,t={(λi,j,t-Ω+1,Ti,j,t-Ω+1),(λi,j,t-Ω+2,Ti,j,t-Ω+2),...,(λi,j,t,τi,j,t)},其中Ω是各API接口用于拟合的数据样本量超参数;使用三次多项式作为最小二乘法的目标函数,以λi,j为自变量、τi,j为因变量,对Θi,j,t中的数据样本点进行拟合,拟合的结果为:
其中,λi,j是调用链第i个微服务对应的第j个API接口的吞吐量,τi,j是调用链第i个微服务对应的第j个API接口的执行时间,ηi,j,t,3、ηi,j,t,2、ηi,j,t,1、ηi,j,t,0分别是所拟合的三次多项式的三次项、二次项、一次项和常数项系数;
定义调用链第i个微服务对应的第j个API接口被Ki,j个除第i个微服务外的微服务的API接口所调用,并且称该API接口具有Ki,j个父微服务接口;
定义Ki,j个父微服务接口中的第k个API接口关于t+1时刻和t+m时刻的吞吐量估计值分别为定义Ki,j个父微服务接口中的第k个API接口完成其自身一次调用过程中调用调用链第i个微服务对应的第j个API接口的平均次数为Mi,j,k,Mi,j,k可以从步骤S1中的数据库中读取;
定义调用链第i个微服务对应的第j个接口关于t+1时刻和t+m时刻的吞吐量估计值分别为依据排队论的Little′s Law,有以下公式:
其中,分别与步骤S2.1和步骤S2.3中的调用链的第一个微服务对应的第r个API接口关于t+1时刻的吞吐量单步预测区间上界/>关于t+m时刻的吞吐量多步预测区间上界/>相对应;进而得到各微服务API接口在当前t时刻关于t+1时刻的吞吐量估计值集合/>关于t+m时刻的吞吐量估计值集合/>
定义调用链第i个微服务的第j个接口关于t+1时刻和t+m时刻的执行时间估计值分别为则/>为:
其中,ηi,j,t,3、ηi,j,t,2、ηi,j,t,1、ηi,j,t,0为公式(5)所拟合的三次多项式的系数;进而得到各微服务API接口在当前t时刻关于t+1时刻的执行时间估计值关于t+m时刻的执行时间估计值/>进而得到各微服务API接口在当前t时刻关于t+1时刻的执行时间估计值集合/>关于t+m时刻的执行时间估计值集合
S3.2、根据各微服务API接口在当前t时刻关于t+1和t+m时刻的吞吐量、执行时间估计值集合,计算各微服务在当前t时刻关于t+1时刻的并发量估计值集合关于t+m时刻的并发量估计值集合/>其中,每个时间步均进行/>的计算,每隔a个时间步进行一次/>的计算,如果当前t时刻不需要计算/>则本步骤S3.2将只计算/>
其中,所述并发量指单个微服务或单个微服务API接口在某一时刻同时处理的请求数;
定义调用链第i个微服务对应的第j个接口关于t+1时刻和t+m时刻的并发量估计值分别为和/>依据排队论的Little′s Law,在不存在请求排队的情况下,和/>为:
定义调用链第i个微服务的关于t+1时刻和t+m时刻的并发量估计值分别为和/>
进而得出各微服务API接口在当前t时刻关于t+1时刻的并发量估计值集合关于t+m时刻的执行时间估计值集合/>
S3.3、根据调用链各微服务关于t+1时刻的并发量集合计算各微服务在当前t时刻需要在运行中状态和可运行状态之间切换的容器实例的数量;
定义一个服务Pod实例所拥有的固定线程池的大小为正整数z,其在微服务应用部署时被设定,z越大应用的并发处理能力越强但资源消耗越大;
定义调用链中的第i个微服务在当前时刻期望的运行中状态的容器实例数量为fi,计算公式如下:
其中,由公式(12)得出,并且采用了向上取整的方式来计算各微服务当前时刻期望的运行中状态的容器实例数量,以避免扩容不足或者缩容过度,更好地降低时延;
在步骤S1中的数据库中获取当前时刻的各微服务处于运行中状态的实例数量Uset={u1,u2,...,ui,...,uI},其中ui是指当前时刻第i个微服务运行中状态实例数量;
根据调用链第i个微服务当前时刻期望的运行中状态容器实例数量及实际运行中实例数量,可计算出第i个微服务所需要切换到运行中状态的实例数量pi为:
pi=fi-ui (15)
其中,当调用链第i个微服务所需要切换到运行中状态的实例数量pi>0,将尝试把|pi|个可运行状态的容器实例切换为运行中状态以降低时延,如果没有可用于切换的可运行状态的容器实例则终止本次切换过程;当调用链第i个微服务所需要切换到运行中状态的实例数量pi<0,将尝试把|pi|个运行中状态的容器被切换为可运行状态以提高资源利用率,如果仅剩1个运行中状态容器实例则终止本次切换过程;
S3.4、根据调用链中各微服务关于t+m时刻的并发量集合计算各微服务在当前t时刻需要的运行中状态和可运行状态的容器实例总数,进而得到各微服务在当前t时刻需要创建或终止的容器实例的数量;
定义调用链第i个微服务在当前时刻的并发量综合估计值为ei,计算公式如下:
其中,由公式(12)得出、/>由公式(13)得出,μ是一个[0,1]范围内的超参数,用于决定并发量的单步估计值和多步估计值在并发量综合估计值中的贡献比例,μ越大并发量单步估计值/>对综合估计值ei的贡献越大;
在步骤S1中的数据库中获取当前时刻的各微服务运行中状态和可运行状态的实例总数Vset={v1,v2,...,vi,...,vI},其中vi是指当前时刻第i个微服务运行中状态和可运行状态的实例总数;
定义调用链中的第i个微服务在当前时刻期望的运行中状态和可运行状态的容器实例总数为gi,计算公式如下:
其中,gi的计算遵循向上取整的原则;γ是一个[0,1]范围内的超参数,用于实现乘性扩容,γ越大每次扩容的幅度越大;而δ是一个正整数超参数,用于实现线性缩容,δ越大每次缩容的幅度越大;
定义调用链第i个微服务所需要创建或终止的容器实例数量为qi,计算公式如下:
qi=gi-vi (18)
其中,当qi>0,将创建|qi|个新的容器实例并使其处于运行中状态以降低时延;当qi<0,将首先尝试终止|qi|个可运行状态的容器实例以提高资源利用率,如果该第i个微服务的所有可运行状态的容器实例均已被终止,则尝试终止运行中状态容器实例,直到所有被终止的容器总数达到|qi|个或者该第i个微服务仅剩1个运行中状态容器实例为止。
进一步地,步骤S4具体包括以下步骤:
S4.1、判断是否已经根据贝叶斯优化选择出调度插件的最终权重配置,若已选择出权重配置则跳至步骤S4.2,否则继续执行此步骤,使用贝叶斯优化初始探索或者迭代过程中的调度插件权重完成本轮实例调度;
定义Kubernetes调度插件LeastAllocated、MostAllocated、PodTopologySpread、BalancedAllocation、InterPodAffinity的权重大小分别为θ1、θ2、θ3、θ4、θ5,其取值区间均为[0,5];定义集群中至少运行一个运行中状态容器实例的虚拟机节点处于高功耗状态,并且在特定调度插件权重配置之下完成一次调度后,高功耗状态节点数量为d(θ1,θ2,θ3,θ4,θ5);定义贝叶斯优化目标函数,用于评估特定调度插件权重配置下的调度效果和集群性能,其接受调度插件权重作为输入,该函数为:
该目标函数越小,表示高功耗状态节点数越少,因而集群的资源利用率越高、任务调度效果越好;
选择贝叶斯优化的代理模型;设进行代理模型构建和初始探索的贝叶斯优化的初始点数为B、完成初始探索后的贝叶斯优化迭代次数为N,则在选择出权重配置前总共需要进行B+N轮调度;定义当前t时刻由贝叶斯优化算法生成的本轮调度插件权重样本点为(θ1,t,θ2,t,θ3,t,θ4,t,θ5,t),把权重样本点应用到Kubernetes集群中,根据步骤S3.3及步骤S3.4的伸缩决策完成一次调度并评估权重样本点的目标函数值,判断贝叶斯优化算法是否完成了迭代次数N,若已完成迭代次数N则输出目标函数值最小的5个调度插件的权重配置作为Kubernetes集群调度插件的最终权重配置,否则更新代理模型;
重新开始步骤S1;
S4.2、根据最终调度插件权重配置和步骤S3.3中的各微服务需要在运行中状态和可运行状态之间切换的实例数量及其切换规则,选择若干节点上的运行中状态容器切换为可运行状态或者选择若干节点上的可运行状态容器切换为运行中状态;根据最终调度插件权重配置和步骤S3.4中的伸缩决策选择在若干节点上的创建容器并使其处于运行中状态或者选择终止若干节点上的对应容器;其中,若某个虚拟机节点上所有已创建容器均转入可运行状态,则用cgroup限制此虚拟机之上的容器进程占用的CPU时间,并仅为此虚拟机保留1个虚拟CPU而使其他CPU下线,用以降低此虚拟机节点功耗,使虚拟机从原先的高功耗状态转入低功耗状态;若某个虚拟机节点上所有容器均被终止,则挂起该虚拟机节点,使其进入资源被回收的挂起状态,待未来该挂起状态的节点被选中用于创建容器时再重启为高功耗状态;完成本轮实例调度后重新开始步骤S1。
面向时延和资源利用率的微服务弹性伸缩调度系统,包括以下模块:
链路监控模块,实时统计并在数据库中存储调用链上的各个微服务的各个API接口的吞吐量、执行时间,各微服务运行中状态、可运行状态的容器数,服务依赖关系;
吞吐量预测模块,用于使用单步预测算法及与之搭配的区间预测算法分析面向用户的调用链第一个微服务的各个API接口的历史吞吐量数据,在设定的置信度下,给出面向用户的调用链第一个微服务的各个API接口吞吐量的单步预测区间上界,使用多步预测算法分析面向用户的调用链第一个微服务的各个API接口的经过平滑化预处理的吞吐量数据,在设定的置信度下,给出面向用户的调用链第一个微服务的各个API接口吞吐量的多步预测区间上界;
伸缩决策模块,根据单步预测结果及数据库存储的信息计算各微服务在当前时刻期望的运行中状态的容器数量并进一步计算出需要在运行中状态和可运行状态之间切换的容器实例的数量;根据单步和多步预测结果及数据库存储的信息计算各微服务在当前时刻期望的运行中状态和可运行状态的容器总数并进一步计算出需要被创建或终止的容器实例的数量;
调度模块,用于根据贝叶斯优化选择Kubernetes调度插件的权重配置,并完成容器实例的调度。
进一步地,所述链路监控模块包括:
数据收集子模块,用于通过OpenTelemetry实时监控微服务调用链并获取调用链上各微服务span数据,通过Kubernetes的CRD获取各个微服务中的运行中状态的容器数、各个微服务中的可运行状态的容器数;
数据聚合子模块,用于通过Kafka建立消息队列定期缓存收集到的span数据,使得原始数据聚合成设定长度的成片数据,然后将设定长度的成片数据按序转发给数据批处理子模块,在转发过程中保持原始数据的先后顺序;
数据批处理子模块,用于通过Flink接收并处理数据聚合子模块转发而来的成片数据,通过分析成片的span数据,得到服务依赖关系、各微服务API接口的吞吐量和执行时间;
数据存储子模块,用于将经过数据批处理得到的服务依赖关系存储到图数据库Neo4j,将各微服务运行中状态、可运行状态的容器数,各微服务API接口的吞吐量和执行时间存储到PostgreSQL数据库。
进一步地,所述吞吐量预测模块包括:
吞吐量单步预测子模块,用于根据单步预测算法SVR和区间预测算法EnbPI分析根微服务吞吐量,预测面向用户的调用链第一个微服务各个API接口下一个时间步的吞吐量上界;
吞吐量多步预测子模块,用于根据线性回归算法、带上界保护的移动平均平滑化法和指数加权移动对吞吐量数据进行平滑化预处理,并使用多步预测算法Prophet分析经平滑化预处理后的数据,预测面向用户的调用链第一个微服务各个API接口多个时间步后的吞吐量上界。
进一步地,所述伸缩决策模块包括:
各微服务并发量推算子模块,根据吞吐量单步预测子模块的结果、数据库中存储的信息和排队论Little's Law计算调用链各微服务在下一时间步的并发量估计值,根据吞吐量多步预测子模块的结果、数据库中存储的信息和排队论Little's Law计算调用链各微服务在未来多个时间步之后的并发量估计值;
伸缩实例数计算子模块,根据调用链各微服务下一时间步的并发量估计值计算各微服务在当前时刻需要在运行中状态和可运行状态之间切换的容器实例的数量;根据调用链各微服务下一时间步和多个时间步之后的并发量估计值计算各微服务在当前时刻需要创建或终止的容器实例数量。
进一步地,所述调度模块包括:
调度插件权重优化子模块,用于根据贝叶斯优化,以最小化高功耗虚拟机节点数为目标,对Kubernetes调度插件LeastAllocated、MostAllocated、PodTopologySpread、BalancedAllocation、InterPodAffinity进行贝叶斯优化代理模型初始探索及迭代探索,以选择出Kubernetes调度插件的最终权重配置,并将探索过程中产生的或最终选择的调度插件权重配置应用到Kubernetes集群中,更新调度策略;
调度执行子模块,用于使用调度插件权重优化子模块输出的调度插件权重来进行容器调度,直到对应微服务的运行中状态和可运行状态的容器数量达到伸缩决策模块的要求,并在每次调度后均检查虚拟机节点的状态,若某个虚拟机节点上所有已创建容器均转入可运行状态,则用cgroup限制此虚拟机之上的容器进程占用的CPU时间,并仅为此虚拟机保留1个虚拟CPU而使其他CPU下线,用以降低此虚拟机节点的资源占用量,若某个虚拟机节点上所有容器均被终止,则挂起该虚拟机节点。
与现有技术相比,本发明具有如下的优点与技术效果:
1.所提出的基于单步和多步区间预测模块的弹性伸缩策略,其中基于单步区间预测实现容器在运行中状态和可运行状态之间的快速切换,并对多步预测的输入数据设计了平滑化处理方法以获得更加平稳的多步预测结果、尽量减少容器的创建和终止次数,从而有效减少了冷启动次数,可以克服现有横向伸缩技术冷启动频繁,难以降低时延且会造成资源浪费的缺点。
2.所提出的使用服务端口隐藏的方法使得容器在不处理用户请求的时候可以不占用CPU时间,并定义这些服务端口被隐藏的实例处于可运行状态以区别于正在提供服务的、占用CPU时间的运行中状态,使得所释放的资源不会以碎片化的形式分布在集群的各个虚拟机节点上,用以克服传统纵向伸缩技术难以有效利用所释放的资源的不足,能够保证所释放资源的可用性,以提高资源利用率。
3.所提出的基于贝叶斯优化选择Kubernetes调度插件的权重,并在每次调度完成后,检查各个虚拟机节点上处于运行中状态和可运行状态的容器数量,使得空闲的虚拟机节点进入低功耗状态或被终止,可以解决现有调度方法中保持虚拟机持续运行、降低集群资源利用率的缺点,从而更好地保障资源利用率。
附图说明
图1为本发明实施例中面向时延和资源利用率的微服务弹性伸缩调度方法示意图;
图2为本发明实施例中微服务调用链示意图;
图3为本发明实施例中微服务容器实例状态转换示意图;
图4为本发明实施例中虚拟机节点状态转换转换示意图;
图5为本发明实施例中面向时延和资源利用率的微服务弹性伸缩调度系统的结构示意图;
图6为本发明实施例中在TrainTicket上的应用响应时间指标实验结果示意图;
图7为本发明实施例中在TrainTicket上的集群资源利用率指标实验结果示意图。
具体实施方式
为了使本发明的技术方案及优点更加清楚明白,以下结合附图,进行进一步的详细说明,但本发明的实施和保护不限于此。
实施例:
面向时延和资源利用率的微服务弹性伸缩调度方法,如图1所示,包括以下步骤:
S1、实时统计并在数据库中存储调用链上的各个微服务对应的各个API接口的吞吐量和执行时间,各微服务运行中状态和可运行状态的容器数,以及服务依赖关系;
图2为一个实施例中的微服务调用链示意图,具体而言,如图2所示,该条调用链表示一次用户请求所调用的各个微服务API接口之间的关系,图中的service1即为面向用户的调用链的第一个微服务,在该调用链中service1中名为“/api/v1/service1/endpoint1”的API接口被用户请求所调用,而该API接口又直接调用了service2的“/api/v1/service2/endpoint1”接口和service3的“/api/v1/service3/endpoint1”接口。依次从上到下逐层调用API接口,从下到上逐层返回API接口的计算结果,便最终完成了用户请求的计算。
所述吞吐量指利用分布式链路追踪系统收集到的span数据中,指定单位时间范围内所有有效请求的数量,若span的开始和结束时间与指定的单位时间范围有交集,则认为该记录代表了一个指定单位时间范围内的有效请求;
所述执行时间指是在服务端测量的完成服务请求所需的处理时间;
所述运行中状态指微服务的容器实例处于处理用户请求的状态,在此状态的实例可以被其他微服务容器实例调用以共同处理用户请求并且占用CPU时间;
所述可运行状态指微服务的容器实例处于服务端口被隐藏、不处理用户请求的状态,在此状态的实例不占用CPU时间,并且其内存页被交换到磁盘上的交换空间中,以释放物理内存;
所述服务依赖关系指分布式链路追踪系统收集到的不同服务的API接口之间的相互依赖关系和调用数据,包括各微服务API接口在完成其自身一次调用过程中所调用其他微服务API接口的平均次数。
图3是一个实施例中微服务容器实例状态转换示意图,具体而言,如图3所示,当一个容器被新创建后将进入初始化状态,用于拉取实例镜像、应用服务初始化;当初始化完成后容器实例将被启动转入运行中状态,在此状态的实例可以被其他微服务容器实例调用以共同处理用户请求;容器可以在运行中状态和可运行状态之间切换,可运行状态的容器实例的服务端口被隐藏、不处理用户请求服务端口被隐藏、不处理用户请求,在此状态的实例不占用CPU时间,并且其内存页被交换到磁盘上的交换空间中,以释放物理内存,为其他运行中的容器实例提供更多的内存空间;运行中状态和可运行状态的容器一旦被终止,将转入终止状态,在此状态下容器实例将被删除而其原先占据的所有资源都会被释放。
S2、基于区间预测算法,单步和多步预测算法,以及吞吐量数据预处理模型给出面向用户的微服务的各API接口吞吐量的单步和多步预测区间上界,具体包括以下步骤:
S2.1、基于区间预测算法EnbPI和单步预测算法SVR在线分别求取面向用户的调用链中第一个微服务对应的各个API接口的吞吐量单步预测区间上界;
区间预测算法EnbPI(Ensemble batch prediction intervals)是一种不假设时间序列的数据分布、适用于非平稳时间序列、需要与底层回归算法搭配使用的先进单步区间预测算法,用于在线推理得出根微服务API接口吞吐量的单步预测区间;支持向量机回归(SVR)是一种经典的使用核函数来进行非线性映射的单步预测算法,在单步区间预测的过程中SVR的模型对象和给定的期望置信水平α一起作为参数被传入EnbPI的模型对象,因此EnbPI的模型对象即单步区间预测的模型对象,其中,定义往单步区间预测的模型对象传入的期望置信水平为α,表示期望的未来实测吞吐量不超过单步区间预测上界的概率为(1+α)/2,其中α∈[0,1];
定义调用链中第一个微服务对应的API接口个数为R,则共有R个单步区间预测模型对象与第一个微服务对应的R个API接口分别一一对应,其中第r个API接口的单步区间预测模型对象的具体训练与推理步骤如下;
针对单步区间预测模型的训练,采用每隔y步更新一次的在线训练方式,单步区间预测模型对象每次在线训练更新所用的输入数据是最近n步时间窗口内调用链第一个微服务对应的第r个API接口原始吞吐量训练样本集合Ctrain={λ1,r,t-n+1,λ1,r,t-n+2,...,λ1,r,t},其中λ1,r,t表示当前t时刻所述调用链第一个微服务第r个API接口的原始吞吐量数据,其中y<n,以保证模型对实时产生的新样本具有良好的适应性;
针对单步区间预测模型的推理,采用实时输出下一个时间步吞吐量预测上界的在线推理方式,单步区间预测模型对象在线推理所用的输入数据是最近h步时间窗口内调用链第一个微服务对应的第r个API接口吞吐量推理样本集合为Cpredict={λ1,r,t-h+1,λ1,r,t-h+2,...,λ1,r,t},其中h<y<n,单步区间预测模型在线推理的输出是微服务应用吞吐量关于t+1时刻的单步预测区间为其中/>是预测区间的下界、/>是预测区间的上界;定义所需求取的调用链第一个微服务对应的第r个API接口关于t+1时刻的吞吐量单步预测区间上界为/>的值即为/>
S2.2、利用由线性回归算法、带上界保护的移动平均平滑化法和指数加权移动平均构成的预处理模型来平滑化调用链中第一个微服务对应的各个API接口的吞吐量数据,得到适合用于多步预测、有助于减少多步区间预测多步累计预测误差的处理后的时间序列数据;
共有R个预处理模型与步骤S2.1中的调用链第一个微服务对应的R个API接口分别一一对应,其中调用链第一个微服务对应的第r个API接口的预处理模型对象的具体数据处理步骤如下;
定义预处理模型的数据处理间隔为a,则预处理模型每隔a个时间步处理对应的API接口吞吐量数据,其中a是大于2的正整数,定义t时刻对应API接口的预处理模型中的带上界保护的移动平均平滑化法输入的吞吐量样本数为wt,在计算wt的过程中,需要在线选出当前t时刻之前W个对应API接口吞吐量数据样本集合D1={λ1,r,t-W+1,λ1,r,t-W+2,...,λ1,r,t},其中W为一个正整数超参数;
具体地,首先以时间为自变量、吞吐量为因变量对D1进行线性回归拟合,得到线性回归拟合直线的斜率为A;接下来,对线性回归拟合得到的斜率系数绝对值|A|进行缩小或放大,得到反映D1时间序列内吞吐量的上升或下降情况的波动趋势因子ξ,计算公式如下:
ξ=ρ*|A| (1)
其中,ρ为一个大于0的超参数,用于缩放线性回归拟合得到的斜率绝对值|A|;
定义带上界保护的移动平均平滑化法的最多输入吞吐量样本数为Wmax,令Wmax的值为W;定义带上界保护的移动平均平滑化法的最少输入吞吐量样本数为Wmin,其中,0<Wmin<Wmax;根据波动趋势因子ξ的大小得到wt为:
其中,若ξ为0,说明没有测量到时间序列数据的上升或下降趋势,此时预处理模型的输入为最大吞吐量样本数Wmax;若ξ大于0,说明D1中存在上升或下降的趋势,随着ξ的增大而减少输入吞吐量样本数可以让多步区间预测算法更好地捕捉最近的趋势从而减少多步区间预测多步累计预测误差,其中如果Wmax*(1-ξ)为小数就向上取整,而预处理模型的输入吞吐量样本数最少可减至Wmin
根据以上计算所得的wt选取t时刻待指数加权移动平均处理的吞吐量数据样本集合按以下公式对D2进行带上界保护的移动平均平滑处理,计算用于t时刻指数加权移动平均(EWMA)算法平滑化处理的数据点/>
其中,G是[1,3]范围内的超参数,σ为D2的标准差,假设吞吐量数据服从正态分布,均值正负G倍标准差的概率为β,则不超过均值加上G倍标准差的概率即为(1+β)/2,据此可以提取出D2时间序列的波动信息,在平滑数据的同时提供上界保护,减小多步预测结果低估吞吐量的概率以降低时延;
定义t时刻调用链第一个微服务对应的第r个API接口对应的预处理模型输出的吞吐量平滑值为∈1,r,t,对进行指数加权移动平均处理,计算公式如下:
其中,F和E分别为指数加权移动平均的固定权重超参数和指数权重超参数;
S2.3、基于多步预测算法Prophet分析预处理后的时间序列数据,在线求取面向用户的调用链第一个微服务对应的各个API接口吞吐量的多步预测区间上界;
共有R个多步预测算法Prophet的模型对象与步骤S2.1中调用链第一个微服务对应的R个API接口分别一一对应;
其中调用链第一个微服务对应的第r个API接口的多步区间预测模型对象的具体推理步骤如下;
多步预测算法Prophet模型对预处理后的时间序列数据进行在线处理,模型参数中的期望置信水平为χ,其中χ∈[0,1];每隔a步将对应API接口最近b次平滑化处理后的值集合Pin={∈1,r,t-a*(b-1),∈1,r,t-a*(b-2),...,∈1,r,t}输入到多步预测算法的模型对象,输出对应API接口的未来多步吞吐量预测区间上界集合 其中a即步骤S2.2中的预处理模型的数据处理间隔,并且b>a;定义所需求取的调用链第一个微服务对应的第r个API接口的关于t+m时刻的吞吐量多步预测区间上界为/>其中m∈{a,2a,...,a2}。
S3、根据单步和多步预测结果及数据库中存储的信息,计算各微服务在当前时刻需要在运行中状态和可运行状态之间切换的容器实例数量及需要创建或终止的容器实例数量,具体包括以下步骤:
S3.1、根据单步预测结果、多步预测结果、服务依赖关系和各微服务API接口吞吐量数据,计算各微服务API接口在当前t时刻关于t+1时刻的吞吐量集合和执行时间估计值集合/>以及关于t+m时刻的吞吐量估计值集合/>和执行时间估计值集合其中,每个时间步均进行/>和/>的计算,每隔a个时间步进行一次/>的计算,如果当前t时刻不需要计算/>则步骤S3.1中将只计算其中a即步骤S2.2中的预处理模型的数据处理间隔;
用最小二乘法根据三次多项式目标函数拟合各微服务API接口历史吞吐量数据和执行时间数据之间的关系;定义调用链中微服务个数为I;定义从调用链入口的第一个微服务开始递推的第i个微服务对应的API接口个数为Ji;定义调用链第i个微服务对应的第j个API接口的吞吐量为λi,j、执行时间为τi,j;定义t时刻调用链第i个微服务对应的第j个API接口的吞吐量为λi,j,t、执行时间为τi,j,t,定义t时刻调用链第i个微服务对应的第j个API接口用于三次多项式拟合的数据样本点集合为Θi,j,t={(λi,j,t-Ω+1,τi,j,t-Ω+1),(λi,j,t-Ω+2,τi,j,t-Ω+2),...,(λi,j,t,τi,j,t)},其中Ω是各API接口用于拟合的数据样本量超参数;使用三次多项式作为最小二乘法的目标函数,以λi,j为自变量、τi,j为因变量,对Θi,j,t中的数据样本点进行拟合,拟合的结果为:
其中,λi,j是调用链第i个微服务对应的第j个API接口的吞吐量,τi,j是调用链第i个微服务对应的第j个API接口的执行时间,ηi,j,t,3、ηi,j,t,2、ηi,j,t,1、ηi,j,t,0分别是所拟合的三次多项式的三次项、二次项、一次项和常数项系数;
定义调用链第i个微服务对应的第j个API接口被Ki,j个除第i个微服务外的微服务的API接口所调用,并且称该API接口具有Ki,j个父微服务接口;
定义Ki,j个父微服务接口中的第k个API接口关于t+1时刻和t+m时刻的吞吐量估计值分别为定义Ki,j个父微服务接口中的第k个API接口完成其自身一次调用过程中调用调用链第i个微服务对应的第j个API接口的平均次数为Mi,j,k,Mi,j,k可以从步骤S1中的数据库中读取;
定义调用链第i个微服务对应的第j个接口关于t+1时刻和t+m时刻的吞吐量估计值分别为依据排队论的Little′s Law,有以下公式:
其中,分别与步骤S2.1和步骤S2.3中的调用链的第一个微服务对应的第r个API接口关于t+1时刻的吞吐量单步预测区间上界/>关于t+m时刻的吞吐量多步预测区间上界/>相对应;进而得到各微服务API接口在当前t时刻关于t+1时刻的吞吐量估计值集合/>关于t+m时刻的吞吐量估计值集合
定义调用链第i个微服务的第j个接口关于t+1时刻和t+m时刻的执行时间估计值分别为则/>为:
其中,ηi,j,t,3、ηi,j,t,2、ηi,j,t,1、ηi,j,t,0为公式(5)所拟合的三次多项式的系数;进而得到各微服务API接口在当前t时刻关于t+1时刻的执行时间估计值关于t+m时刻的执行时间估计值/>进而得到各微服务API接口在当前t时刻关于t+1时刻的执行时间估计值集合/>关于t+m时刻的执行时间估计值集合
S3.2、根据各微服务API接口在当前t时刻关于t+1和t+m时刻的吞吐量、执行时间估计值集合,计算各微服务在当前t时刻关于t+1时刻的并发量估计值集合关于t+m时刻的并发量估计值集合/>其中,每个时间步均进行/>的计算,每隔a个时间步进行一次/>的计算,如果当前t时刻不需要计算/>则本步骤S3.2将只计算/>
其中,所述并发量指单个微服务或单个微服务API接口在某一时刻同时处理的请求数;
定义调用链第i个微服务对应的第j个接口关于t+1时刻和t+m时刻的并发量估计值分别为和/>依据排队论的Little′s Law,在不存在请求排队的情况下,和/>为:
定义调用链第i个微服务的关于t+1时刻和t+m时刻的并发量估计值分别为和/>
进而得出各微服务API接口在当前t时刻关于t+1时刻的并发量估计值集合关于t+m时刻的执行时间估计值集合/>
S3.3、根据调用链各微服务关于t+1时刻的并发量集合计算各微服务在当前t时刻需要在运行中状态和可运行状态之间切换的容器实例的数量;
定义一个服务Pod实例所拥有的固定线程池的大小为正整数z,其在微服务应用部署时被设定,z越大应用的并发处理能力越强但资源消耗越大;
定义调用链中的第i个微服务在当前时刻期望的运行中状态的容器实例数量为fi,计算公式如下:
/>
其中,由公式(12)得出,并且采用了向上取整的方式来计算各微服务当前时刻期望的运行中状态的容器实例数量,以避免扩容不足或者缩容过度,更好地降低时延;
在步骤S1中的数据库中获取当前时刻的各微服务处于运行中状态的实例数量Uset={u1,u2,...,ui,...,uI},其中ui是指当前时刻第i个微服务运行中状态实例数量;
根据调用链第i个微服务当前时刻期望的运行中状态容器实例数量及实际运行中实例数量,可计算出第i个微服务所需要切换到运行中状态的实例数量pi为:
pi=fi-ui (15)
其中,当调用链第i个微服务所需要切换到运行中状态的实例数量pi>0,将尝试把|pi|个可运行状态的容器实例切换为运行中状态以降低时延,如果没有可用于切换的可运行状态的容器实例则终止本次切换过程;当调用链第i个微服务所需要切换到运行中状态的实例数量pi<0,将尝试把|pi|个运行中状态的容器被切换为可运行状态以提高资源利用率,如果仅剩1个运行中状态容器实例则终止本次切换过程;
S3.4、根据调用链中各微服务关于t+m时刻的并发量集合计算各微服务在当前t时刻需要的运行中状态和可运行状态的容器实例总数,进而得到各微服务在当前t时刻需要创建或终止的容器实例的数量;
定义调用链第i个微服务在当前时刻的并发量综合估计值为ei,计算公式如下:
其中,由公式(12)得出、/>由公式(13)得出,μ是一个[0,1]范围内的超参数,用于决定并发量的单步估计值和多步估计值在并发量综合估计值中的贡献比例,μ越大并发量单步估计值/>对综合估计值ei的贡献越大;
在步骤S1中的数据库中获取当前时刻的各微服务运行中状态和可运行状态的实例总数Vset={v1,v2,...,vi,...,vI},其中vi是指当前时刻第i个微服务运行中状态和可运行状态的实例总数;
定义调用链中的第i个微服务在当前时刻期望的运行中状态和可运行状态的容器实例总数为gi,计算公式如下:
其中,gi的计算遵循向上取整的原则;γ是一个[0,1]范围内的超参数,用于实现乘性扩容,γ越大每次扩容的幅度越大;而δ是一个正整数超参数,用于实现线性缩容,δ越大每次缩容的幅度越大;
定义调用链第i个微服务所需要创建或终止的容器实例数量为qi,计算公式如下:
qi=gi-vi (18)
其中,当qi>0,将创建|qi|个新的容器实例并使其处于运行中状态以降低时延;当qi<0,将首先尝试终止|qi|个可运行状态的容器实例以提高资源利用率,如果该第i个微服务的所有可运行状态的容器实例均已被终止,则尝试终止运行中状态容器实例,直到所有被终止的容器总数达到|qi|个或者该第i个微服务仅剩1个运行中状态容器实例为止。
S4、基于贝叶斯优化选择Kubernetes调度插件的权重并完成容器实例调度,完成实例调度后重新开始步骤S1,具体包括以下步骤:
S4.1、判断是否已经根据贝叶斯优化选择出调度插件的最终权重配置,若已选择出权重配置则跳至步骤S4.2,否则继续执行此步骤,使用贝叶斯优化初始探索或者迭代过程中的调度插件权重完成本轮实例调度;
定义Kubernetes调度插件LeastAllocated、MostAllocated、PodTopologySpread、BalancedAllocation、InterPodAffinity的权重大小分别为θ1、θ2、θ3、θ4、θ5,其取值区间均为[0,5];定义集群中至少运行一个运行中状态容器实例的虚拟机节点处于高功耗状态,并且在特定调度插件权重配置之下完成一次调度后,高功耗状态节点数量为d(θ1,θ2,θ3,θ4,θ5);定义贝叶斯优化目标函数,用于评估特定调度插件权重配置下的调度效果和集群性能,其接受调度插件权重作为输入,该函数为:
该目标函数越小,表示高功耗状态节点数越少,因而集群的资源利用率越高、任务调度效果越好;
选择贝叶斯优化的代理模型;设进行代理模型构建和初始探索的贝叶斯优化的初始点数为B、完成初始探索后的贝叶斯优化迭代次数为N,则在选择出权重配置前总共需要进行B+N轮调度;定义当前t时刻由贝叶斯优化算法生成的本轮调度插件权重样本点为(θ1,t,θ2,t,θ3,t,θ4,t,θ5,t),把权重样本点应用到Kubernetes集群中,根据步骤S3.3及步骤S3.4的伸缩决策完成一次调度并评估权重样本点的目标函数值,判断贝叶斯优化算法是否完成了迭代次数N,若已完成迭代次数N则输出目标函数值最小的5个调度插件的权重配置作为Kubernetes集群调度插件的最终权重配置,否则更新代理模型;
重新开始步骤S1;
S4.2、根据最终调度插件权重配置和步骤S3.3中的各微服务需要在运行中状态和可运行状态之间切换的实例数量及其切换规则,选择若干节点上的运行中状态容器切换为可运行状态或者选择若干节点上的可运行状态容器切换为运行中状态;根据最终调度插件权重配置和步骤S3.4中的伸缩决策选择在若干节点上的创建容器并使其处于运行中状态或者选择终止若干节点上的对应容器;其中,若某个虚拟机节点上所有已创建容器均转入可运行状态,则用cgroup限制此虚拟机之上的容器进程占用的CPU时间,并仅为此虚拟机保留1个虚拟CPU而使其他CPU下线,用以降低此虚拟机节点功耗,使虚拟机从原先的高功耗状态转入低功耗状态;若某个虚拟机节点上所有容器均被终止,则挂起该虚拟机节点,使其进入资源被回收的挂起状态,待未来该挂起状态的节点被选中用于创建容器时再重启为高功耗状态;完成本轮实例调度后重新开始步骤S1。
图4是一个实施例中虚拟机节点状态示意图,具体而言,如图4所示,当一个虚拟机节点至少有一个运行中状态的容器实例时,此虚拟机节点处于高功耗状态;当一个高功耗状态节点的所有运行中状态容器实例均被切换到可运行状态,此节点会转入低功耗状态,仅保留1个虚拟CPU,而其他CPU将下线,并且使用cgroup限制一些用户指定的虚拟机进程资源,例如限制Docker daemon、kubelet、kube-proxy的CPU消耗;当一个低功耗状态的节点上有容器实例被切换为运行中状态,此节点会重新转入高功耗状态;当一个虚拟机节点上所有容器实例均被终止,此节点将被转入挂起状态,在此状态下虚拟机所占据的资源将被回收,等待未来需要时重启。
面向时延和资源利用率的微服务弹性伸缩调度系统,如图5所示,包括以下模块:
链路监控模块,实时统计并在数据库中存储调用链上的各个微服务的各个API接口的吞吐量、执行时间,各微服务运行中状态、可运行状态的容器数,服务依赖关系;
所述链路监控模块包括:
数据收集子模块,用于通过OpenTelemetry实时监控微服务调用链并获取调用链上各微服务span数据,通过Kubernetes的CRD获取各个微服务中的运行中状态的容器数、各个微服务中的可运行状态的容器数;
数据聚合子模块,用于通过Kafka建立消息队列定期缓存收集到的span数据,使得原始数据聚合成设定长度的成片数据,然后将设定长度的成片数据按序转发给数据批处理子模块,在转发过程中保持原始数据的先后顺序;
数据批处理子模块,用于通过Flink接收并处理数据聚合子模块转发而来的成片数据,通过分析成片的span数据,得到服务依赖关系、各微服务API接口的吞吐量和执行时间;
数据存储子模块,用于将经过数据批处理得到的服务依赖关系存储到图数据库Neo4j,将各微服务运行中状态、可运行状态的容器数,各微服务API接口的吞吐量和执行时间存储到PostgreSQL数据库。
吞吐量预测模块,用于使用单步预测算法及与之搭配的区间预测算法分析面向用户的调用链第一个微服务的各个API接口的历史吞吐量数据,在设定的置信度下,给出面向用户的调用链第一个微服务的各个API接口吞吐量的单步预测区间上界,使用多步预测算法分析面向用户的调用链第一个微服务的各个API接口的经过平滑化预处理的吞吐量数据,在设定的置信度下,给出面向用户的调用链第一个微服务的各个API接口吞吐量的多步预测区间上界;
所述吞吐量预测模块包括:
吞吐量单步预测子模块,用于根据单步预测算法SVR和区间预测算法EnbPI分析根微服务吞吐量,预测面向用户的调用链第一个微服务各个API接口下一个时间步的吞吐量上界;
吞吐量多步预测子模块,用于根据线性回归算法、带上界保护的移动平均平滑化法和指数加权移动对吞吐量数据进行平滑化预处理,并使用多步预测算法Prophet分析经平滑化预处理后的数据,预测面向用户的调用链第一个微服务各个API接口多个时间步后的吞吐量上界。
伸缩决策模块,根据单步预测结果及数据库存储的信息计算各微服务在当前时刻期望的运行中状态的容器数量并进一步计算出需要在运行中状态和可运行状态之间切换的容器实例的数量;根据单步和多步预测结果及数据库存储的信息计算各微服务在当前时刻期望的运行中状态和可运行状态的容器总数并进一步计算出需要被创建或终止的容器实例的数量;
所述伸缩决策模块包括:
各微服务并发量推算子模块,根据吞吐量单步预测子模块的结果、数据库中存储的信息和排队论Little's Law计算调用链各微服务在下一时间步的并发量估计值,根据吞吐量多步预测子模块的结果、数据库中存储的信息和排队论Little's Law计算调用链各微服务在未来多个时间步之后的并发量估计值;
伸缩实例数计算子模块,根据调用链各微服务下一时间步的并发量估计值计算各微服务在当前时刻需要在运行中状态和可运行状态之间切换的容器实例的数量;根据调用链各微服务下一时间步和多个时间步之后的并发量估计值计算各微服务在当前时刻需要创建或终止的容器实例数量。
调度模块,用于根据贝叶斯优化选择Kubernetes调度插件的权重配置,并完成容器实例的调度;
所述调度模块包括:
调度插件权重优化子模块,用于根据贝叶斯优化,以最小化高功耗虚拟机节点数为目标,对Kubernetes调度插件LeastAllocated、MostAllocated、PodTopologySpread、BalancedAllocation、InterPodAffinity进行贝叶斯优化代理模型初始探索及迭代探索,以选择出Kubernetes调度插件的最终权重配置,并将探索过程中产生的或最终选择的调度插件权重配置应用到Kubernetes集群中,更新调度策略;
调度执行子模块,用于使用调度插件权重优化子模块输出的调度插件权重来进行容器调度,直到对应微服务的运行中状态和可运行状态的容器数量达到伸缩决策模块的要求,并在每次调度后均检查虚拟机节点的状态,若某个虚拟机节点上所有已创建容器均转入可运行状态,则用cgroup限制此虚拟机之上的容器进程占用的CPU时间,并仅为此虚拟机保留1个虚拟CPU而使其他CPU下线,用以降低此虚拟机节点的资源占用量,若某个虚拟机节点上所有容器均被终止,则挂起该虚拟机节点。
在一个实施例中,本发明在开源微服务框架Train Ticket上进行了实验。实验的微服务系统Train Ticket部署在由5台物理服务器虚拟化而来的50台虚拟机节点的集群上,其中每台物理服务器拥有48个ARM64核心的CPU、256GiB内存,利用locust工具依照真实业务流量数据集“基于在线商店服务器访问日志的HTTP级电子商务数据(Chodak G,Suchacka G,Chawla Y.HTTP-level e-commerce data based on server access logsfor an online store[J].Computer networks,2020,183:107589.)”模拟用户行为、生成请求负载来进行弹性伸缩和调度实验。
在一个实施例中,图6、图7分别示出了本发明在Train Ticket上响应时间指标实验结果、集群资源利用率指标实验结果,其中Microkube表示本发明,Kubernetes-HPA指在经典的横向伸缩策略HPA之上搭配了默认调度插件权重的Kubernetes调度器,同理Kubernetes-AIMD-H、Kubernetes-AIDM-V分别表示在AIMD-H、AIMD-V这两种弹性伸缩策略之上搭配了默认调度插件权重的Kubernetes调度器,其中AIMD-H表示基于拥塞控制算法AIMD和横向伸缩思想的伸缩策略,AIMD-V表示基于AIMD和纵向伸缩思想的伸缩策略。
具体而言,如图6所示,微服务应用响应时间的累计分布函数(CDF)曲线越靠近左上角,表示微服务应用响应时间越小;实验结果表明,相比于现有技术,在相同请求负载下,本发明有最小的微服务应用响应延迟,其中CDF大于0.95对应的尾部延迟明显小于其他技术;特别地,本发明的CDF为1对应的最长尾延迟仅为其他技术的22.84%至60.63%,本发明的CDF为0.5对应的中位数延迟仅为其他技术的33.73%至70.40%,说明本发明在极端情况和一般情况之下对时延都有较好的保障效果。
具体而言,如图7所示,实验结果表明,相比于现有技术,本发明的CPU和内存利用率均有提高,其中CPU利用率比其他技术提高了7.49%至11.90%,内存利用率比其他技术提高了11.92%至17.80%,说明本发明对集群的资源利用率有较好的保障效果。
上述为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (10)

1.面向时延和资源利用率的微服务弹性伸缩调度方法,其特征在于,包括以下步骤:
S1、实时统计并在数据库中存储调用链上的各个微服务对应的各个API接口的吞吐量和执行时间,各微服务运行中状态和可运行状态的容器数,以及服务依赖关系;
S2、基于区间预测算法,单步和多步预测算法,以及吞吐量数据预处理模型给出面向用户的微服务的各API接口吞吐量的单步和多步预测区间上界;
S3、根据单步和多步预测结果及数据库中存储的信息,计算各微服务在当前时刻需要在运行中状态和可运行状态之间切换的容器实例数量及需要创建或终止的容器实例数量;
S4、基于贝叶斯优化选择Kubernetes调度插件的权重并完成容器实例调度,完成实例调度后重新开始步骤S1。
2.根据权利要求1所述的面向时延和资源利用率的微服务弹性伸缩调度方法,其特征在于,步骤S1中,所述吞吐量指利用分布式链路追踪系统收集到的span数据中,指定单位时间范围内所有有效请求的数量,若span的开始和结束时间与指定的单位时间范围有交集,则认为该记录代表了一个指定单位时间范围内的有效请求;
所述执行时间指是在服务端测量的完成服务请求所需的处理时间;
所述运行中状态指微服务的容器实例处于处理用户请求的状态,在此状态的实例可以被其他微服务容器实例调用以共同处理用户请求并且占用CPU时间;
所述可运行状态指微服务的容器实例处于服务端口被隐藏、不处理用户请求的状态,在此状态的实例不占用CPU时间,并且其内存页被交换到磁盘上的交换空间中,以释放物理内存;
所述服务依赖关系指分布式链路追踪系统收集到的不同服务的API接口之间的相互依赖关系和调用数据,包括各微服务API接口在完成其自身一次调用过程中所调用其他微服务API接口的平均次数。
3.根据权利要求2所述的面向时延和资源利用率的微服务弹性伸缩调度方法,其特征在于,步骤S2具体包括以下步骤:
S2.1、基于区间预测算法EnbPI和单步预测算法SVR在线分别求取面向用户的调用链中第一个微服务对应的各个API接口的吞吐量单步预测区间上界;
区间预测算法EnbPI是一种不假设时间序列的数据分布、适用于非平稳时间序列、需要与底层回归算法搭配使用的先进单步区间预测算法,用于在线推理得出根微服务API接口吞吐量的单步预测区间;支持向量机回归是一种经典的使用核函数来进行非线性映射的单步预测算法,在单步区间预测的过程中SVR的模型对象和给定的期望置信水平α一起作为参数被传入EnbPI的模型对象,因此EnbPI的模型对象即单步区间预测的模型对象,其中,定义往单步区间预测的模型对象传入的期望置信水平为α,表示期望的未来实测吞吐量不超过单步区间预测上界的概率为(1+α)/2,其中α∈[0,1];
定义调用链中第一个微服务对应的API接口个数为R,则共有R个单步区间预测模型对象与第一个微服务对应的R个API接口分别一一对应,其中第r个API接口的单步区间预测模型对象的具体训练与推理步骤如下;
针对单步区间预测模型的训练,采用每隔y步更新一次的在线训练方式,单步区间预测模型对象每次在线训练更新所用的输入数据是最近n步时间窗口内调用链第一个微服务对应的第r个API接口原始吞吐量训练样本集合Ctrain={λ1,r,t-n+11,r,t-n+2,…,λ1,r,t},其中λ1,r,t表示当前t时刻所述调用链第一个微服务第r个API接口的原始吞吐量数据,其中y<n,以保证模型对实时产生的新样本具有良好的适应性;
针对单步区间预测模型的推理,采用实时输出下一个时间步吞吐量预测上界的在线推理方式,单步区间预测模型对象在线推理所用的输入数据是最近j步时间窗口内调用链第一个微服务对应的第r个API接口吞吐量推理样本集合为Cpredict={λ1,r,t-h+11,r,t-j+2,…,λ1,r,t},其中h<y<n,单步区间预测模型在线推理的输出是微服务应用吞吐量关于t+1时刻的单步预测区间为其中/>是预测区间的下界、/>是预测区间的上界;定义所需求取的调用链第一个微服务对应的第r个API接口关于t+1时刻的吞吐量单步预测区间上界为/>的值即为/>
S2.2、利用由线性回归算法、带上界保护的移动平均平滑化法和指数加权移动平均构成的预处理模型来平滑化调用链中第一个微服务对应的各个API接口的吞吐量数据,得到适合用于多步预测、有助于减少多步区间预测多步累计预测误差的处理后的时间序列数据;
共有R个预处理模型与步骤S2.1中的调用链第一个微服务对应的R个API接口分别一一对应,其中调用链第一个微服务对应的第r个API接口的预处理模型对象的具体数据处理步骤如下;
定义预处理模型的数据处理间隔为a,则预处理模型每隔a个时间步处理对应的API接口吞吐量数据,其中a是大于2的正整数,定义t时刻对应API接口的预处理模型中的带上界保护的移动平均平滑化法输入的吞吐量样本数为wt,在计算wt的过程中,需要在线选出当前t时刻之前W个对应API接口吞吐量数据样本集合D1={λ1,r,t-W+11,r,t-W+2,…,λ1,r,t},其中W为一个正整数超参数;
具体地,首先以时间为自变量、吞吐量为因变量对D1进行线性回归拟合,得到线性回归拟合直线的斜率为A;接下来,对线性回归拟合得到的斜率系数绝对值|A|进行缩小或放大,得到反映D1时间序列内吞吐量的上升或下降情况的波动趋势因子ξ,计算公式如下:
ξ=ρ*|A| (1)
其中,ρ为一个大于0的超参数,用于缩放线性回归拟合得到的斜率绝对值|A|;
定义带上界保护的移动平均平滑化法的最多输入吞吐量样本数为Wmax,令Wmax的值为W;定义带上界保护的移动平均平滑化法的最少输入吞吐量样本数为Wmin,其中,0<Wmin<Wmax;根据波动趋势因子ξ的大小得到wt为:
其中,若ξ为0,说明没有测量到时间序列数据的上升或下降趋势,此时预处理模型的输入为最大吞吐量样本数Wmax;若ξ大于0,说明D1中存在上升或下降的趋势,随着ξ的增大而减少输入吞吐量样本数可以让多步区间预测算法更好地捕捉最近的趋势从而减少多步区间预测多步累计预测误差,其中如果Wmax*(1-ξ)为小数就向上取整,而预处理模型的输入吞吐量样本数最少可减至Wmin
根据以上计算所得的wt选取t时刻待指数加权移动平均处理的吞吐量数据样本集合D2={λt-wt+1t-wt+2,…,λt};按以下公式对D2进行带上界保护的移动平均平滑处理,计算用于t时刻指数加权移动平均(EWMA)算法平滑化处理的数据点
其中,G是[1,3]范围内的超参数,σ为D2的标准差,假设吞吐量数据服从正态分布,均值正负G倍标准差的概率为β,则不超过均值加上G倍标准差的概率即为(1+β)/2,据此可以提取出D2时间序列的波动信息,在平滑数据的同时提供上界保护,减小多步预测结果低估吞吐量的概率以降低时延;
定义t时刻调用链第一个微服务对应的第r个API接口对应的预处理模型输出的吞吐量平滑值为∈1,r,t,对进行指数加权移动平均处理,计算公式如下:
其中,F和E分别为指数加权移动平均的固定权重超参数和指数权重超参数;
S2.3、基于多步预测算法Prophet分析预处理后的时间序列数据,在线求取面向用户的调用链第一个微服务对应的各个API接口吞吐量的多步预测区间上界;
共有R个多步预测算法Prophet的模型对象与步骤S2.1中调用链第一个微服务对应的R个API接口分别一一对应;
其中调用链第一个微服务对应的第r个API接口的多步区间预测模型对象的具体推理步骤如下;
多步预测算法Prophet模型对预处理后的时间序列数据进行在线处理,模型参数中的期望置信水平为χ,其中χ∈[0,1];每隔a步将对应API接口最近b次平滑化处理后的值集合Pin={∈1,r,t-a*(b-1),∈1,r,t-a*(b-2),…,∈1,r,t}输入到多步预测算法的模型对象,输出对应API接口的未来多步吞吐量预测区间上界集合 其中a即步骤S2.2中的预处理模型的数据处理间隔,并且b>a;定义所需求取的调用链第一个微服务对应的第r个API接口的关于t+m时刻的吞吐量多步预测区间上界为/>其中m∈{a,2a,…,a2}。
4.根据权利要求3所述的面向时延和资源利用率的微服务弹性伸缩调度方法,其特征在于,步骤S3具体包括以下步骤:
S3.1、根据单步预测结果、多步预测结果、服务依赖关系和各微服务API接口吞吐量数据,计算各微服务API接口在当前t时刻关于t+1时刻的吞吐量集合和执行时间估计值集合/>以及关于t+m时刻的吞吐量估计值集合/>和执行时间估计值集合/>其中,每个时间步均进行/>和/>的计算,每隔a个时间步进行一次/>和/>的计算,如果当前t时刻不需要计算/>则步骤S3.1中将只计算/>
用最小二乘法根据三次多项式目标函数拟合各微服务API接口历史吞吐量数据和执行时间数据之间的关系;定义调用链中微服务个数为I;定义从调用链入口的第一个微服务开始递推的第i个微服务对应的API接口个数为Ji;定义调用链第i个微服务对应的第j个API接口的吞吐量为λi,j、执行时间为τi,j;定义t时刻调用链第i个微服务对应的第j个API接口的吞吐量为λi,j,t、执行时间为τi,j,t,定义t时刻调用链第i个微服务对应的第j个API接口用于三次多项式拟合的数据样本点集合为Θi,j,t={(λi,j,t-Ω+1i,j,t-Ω+1),(λi,j,t-Ω+2i,j,t-Ω+2),…,(λi,j,ti,j,t)},其中Ω是各API接口用于拟合的数据样本量超参数;使用三次多项式作为最小二乘法的目标函数,以λi,j为自变量、τi,j为因变量,对Θi,j,t中的数据样本点进行拟合,拟合的结果为:
其中,λi,j是调用链第i个微服务对应的第j个API接口的吞吐量,τi,j是调用链第i个微服务对应的第j个API接口的执行时间,ηi,j,t,3、ηi,j,t,2、ηi,j,t,1、ηi,j,t,0分别是所拟合的三次多项式的三次项、二次项、一次项和常数项系数;
定义调用链第i个微服务对应的第j个API接口被Ki,j个除第i个微服务外的微服务的API接口所调用,并且称该API接口具有Ki,j个父微服务接口;
定义Ki,j个父微服务接口中的第k个API接口关于t+1时刻和t+m时刻的吞吐量估计值分别为定义Ki,j个父微服务接口中的第k个API接口完成其自身一次调用过程中调用调用链第i个微服务对应的第j个API接口的平均次数为Mi,j,k,Mi,j,k可以从步骤S1中的数据库中读取;
定义调用链第i个微服务对应的第j个接口关于t+1时刻和t+m时刻的吞吐量估计值分别为依据排队论的Little's Law,有以下公式:
其中,分别与步骤S2.1和步骤S2.3中的调用链的第一个微服务对应的第r个API接口关于t+1时刻的吞吐量单步预测区间上界/>关于t+m时刻的吞吐量多步预测区间上界/>相对应;进而得到各微服务API接口在当前t时刻关于t+1时刻的吞吐量估计值集合/>关于t+m时刻的吞吐量估计值集合
定义调用链第i个微服务的第j个接口关于t+1时刻和t+m时刻的执行时间估计值分别为则/>为:
其中,ηi,j,t,3、ηi,j,t,2、ηi,j,t,1、ηi,j,t,0为公式(5)所拟合的三次多项式的系数;进而得到各微服务API接口在当前t时刻关于t+1时刻的执行时间估计值关于t+m时刻的执行时间估计值/>进而得到各微服务API接口在当前t时刻关于t+1时刻的执行时间估计值集合/>关于t+m时刻的执行时间估计值集合
S3.2、根据各微服务API接口在当前t时刻关于t+1和t+m时刻的吞吐量、执行时间估计值集合,计算各微服务在当前t时刻关于t+1时刻的并发量估计值集合关于t+m时刻的并发量估计值集合/>其中,每个时间步均进行/>的计算,每隔a个时间步进行一次/>的计算,如果当前t时刻不需要计算/>则本步骤S3.2将只计算/>
其中,所述并发量指单个微服务或单个微服务API接口在某一时刻同时处理的请求数;
定义调用链第i个微服务对应的第j个接口关于t+1时刻和t+m时刻的并发量估计值分别为和/>依据排队论的Little's Law,在不存在请求排队的情况下,/>和/>为:
定义调用链第i个微服务的关于t+1时刻和t+m时刻的并发量估计值分别为
进而得出各微服务API接口在当前t时刻关于t+1时刻的并发量估计值集合关于t+m时刻的执行时间估计值集合/>
S3.3、根据调用链各微服务关于t+1时刻的并发量集合计算各微服务在当前t时刻需要在运行中状态和可运行状态之间切换的容器实例的数量;
定义一个服务Pod实例所拥有的固定线程池的大小为正整数z,其在微服务应用部署时被设定,z越大应用的并发处理能力越强但资源消耗越大;
定义调用链中的第i个微服务在当前时刻期望的运行中状态的容器实例数量为fi,计算公式如下:
其中,由公式(12)得出,并且采用了向上取整的方式来计算各微服务当前时刻期望的运行中状态的容器实例数量,以避免扩容不足或者缩容过度,更好地降低时延;
在步骤S1中的数据库中获取当前时刻的各微服务处于运行中状态的实例数量Uset={u1,u2,…,ui,…,uI},其中ui是指当前时刻第i个微服务运行中状态实例数量;
根据调用链第i个微服务当前时刻期望的运行中状态容器实例数量及实际运行中实例数量,可计算出第i个微服务所需要切换到运行中状态的实例数量pi为:
pi=fi-ui (15)
其中,当调用链第i个微服务所需要切换到运行中状态的实例数量pi>0,将尝试把|pi|个可运行状态的容器实例切换为运行中状态以降低时延,如果没有可用于切换的可运行状态的容器实例则终止本次切换过程;当调用链第i个微服务所需要切换到运行中状态的实例数量pi<0,将尝试把|pi|个运行中状态的容器被切换为可运行状态以提高资源利用率,如果仅剩1个运行中状态容器实例则终止本次切换过程;
S3.4、根据调用链中各微服务关于t+m时刻的并发量集合计算各微服务在当前t时刻需要的运行中状态和可运行状态的容器实例总数,进而得到各微服务在当前t时刻需要创建或终止的容器实例的数量;
定义调用链第i个微服务在当前时刻的并发量综合估计值为ei,计算公式如下:
其中,由公式(12)得出、/>由公式(13)得出,μ是一个[0,1]范围内的超参数,用于决定并发量的单步估计值和多步估计值在并发量综合估计值中的贡献比例,μ越大并发量单步估计值/>对综合估计值ei的贡献越大;
在步骤S1中的数据库中获取当前时刻的各微服务运行中状态和可运行状态的实例总数Vset={v1,v2,…,vi,…,vI},其中vi是指当前时刻第i个微服务运行中状态和可运行状态的实例总数;
定义调用链中的第i个微服务在当前时刻期望的运行中状态和可运行状态的容器实例总数为gi,计算公式如下:
其中,gi的计算遵循向上取整的原则;γ是一个[0,1]范围内的超参数,用于实现乘性扩容,γ越大每次扩容的幅度越大;而δ是一个正整数超参数,用于实现线性缩容,δ越大每次缩容的幅度越大;
定义调用链第i个微服务所需要创建或终止的容器实例数量为qi,计算公式如下:
qi=gi-vi (18)
其中,当qi>0,将创建|qi|个新的容器实例并使其处于运行中状态以降低时延;当qi<0,将首先尝试终止|qi|个可运行状态的容器实例以提高资源利用率,如果该第i个微服务的所有可运行状态的容器实例均已被终止,则尝试终止运行中状态容器实例,直到所有被终止的容器总数达到|qi|个或者该第i个微服务仅剩1个运行中状态容器实例为止。
5.根据权利要求4所述的面向时延和资源利用率的微服务弹性伸缩调度方法,其特征在于,步骤S4具体包括以下步骤:
S4.1、判断是否已经根据贝叶斯优化选择出调度插件的最终权重配置,若已选择出权重配置则跳至步骤S4.2,否则继续执行此步骤,使用贝叶斯优化初始探索或者迭代过程中的调度插件权重完成本轮实例调度;
定义Kubernetes调度插件LeastAllocated、MostAllocated、PodTopologySpread、BalancedAllocation、InterPodAffinity的权重大小分别为θ1、θ2、θ3、θ4、θ5,其取值区间均为[0,5];定义集群中至少运行一个运行中状态容器实例的虚拟机节点处于高功耗状态,并且在特定调度插件权重配置之下完成一次调度后,高功耗状态节点数量为d(θ12345);定义贝叶斯优化目标函数,用于评估特定调度插件权重配置下的调度效果和集群性能,其接受调度插件权重作为输入,该函数为:
该目标函数越小,表示高功耗状态节点数越少,因而集群的资源利用率越高、任务调度效果越好;
选择贝叶斯优化的代理模型;设进行代理模型构建和初始探索的贝叶斯优化的初始点数为B、完成初始探索后的贝叶斯优化迭代次数为N,则在选择出权重配置前总共需要进行B+N轮调度;定义当前t时刻由贝叶斯优化算法生成的本轮调度插件权重样本点为(θ1,t2,t3,t4,t5,t),把权重样本点应用到Kubernetes集群中,根据步骤S3.3及步骤S3.4的伸缩决策完成一次调度并评估权重样本点的目标函数值,判断贝叶斯优化算法是否完成了迭代次数N,若已完成迭代次数N则输出目标函数值最小的5个调度插件的权重配置作为Kubernetes集群调度插件的最终权重配置,否则更新代理模型;
重新开始步骤S1;
S4.2、根据最终调度插件权重配置和步骤S3.3中的各微服务需要在运行中状态和可运行状态之间切换的实例数量及其切换规则,选择若干节点上的运行中状态容器切换为可运行状态或者选择若干节点上的可运行状态容器切换为运行中状态;根据最终调度插件权重配置和步骤S3.4中的伸缩决策选择在若干节点上的创建容器并使其处于运行中状态或者选择终止若干节点上的对应容器;其中,若某个虚拟机节点上所有已创建容器均转入可运行状态,则用cgroup限制此虚拟机之上的容器进程占用的CPU时间,并仅为此虚拟机保留1个虚拟CPU而使其他CPU下线,用以降低此虚拟机节点功耗,使虚拟机从原先的高功耗状态转入低功耗状态;若某个虚拟机节点上所有容器均被终止,则挂起该虚拟机节点,使其进入资源被回收的挂起状态,待未来该挂起状态的节点被选中用于创建容器时再重启为高功耗状态;完成本轮实例调度后重新开始步骤S1。
6.面向时延和资源利用率的微服务弹性伸缩调度系统,其特征在于,所述系统包括以下模块:
链路监控模块,实时统计并在数据库中存储调用链上的各个微服务的各个API接口的吞吐量、执行时间,各微服务运行中状态、可运行状态的容器数,服务依赖关系;
吞吐量预测模块,用于使用单步预测算法及与之搭配的区间预测算法分析面向用户的调用链第一个微服务的各个API接口的历史吞吐量数据,在设定的置信度下,给出面向用户的调用链第一个微服务的各个API接口吞吐量的单步预测区间上界,使用多步预测算法分析面向用户的调用链第一个微服务的各个API接口的经过平滑化预处理的吞吐量数据,在设定的置信度下,给出面向用户的调用链第一个微服务的各个API接口吞吐量的多步预测区间上界;
伸缩决策模块,根据单步预测结果及数据库存储的信息计算各微服务在当前时刻期望的运行中状态的容器数量并进一步计算出需要在运行中状态和可运行状态之间切换的容器实例的数量;根据单步和多步预测结果及数据库存储的信息计算各微服务在当前时刻期望的运行中状态和可运行状态的容器总数并进一步计算出需要被创建或终止的容器实例的数量;
调度模块,用于根据贝叶斯优化选择Kubernetes调度插件的权重配置,并完成容器实例的调度。
7.根据权利要求6所述的面向时延和资源利用率的微服务弹性伸缩调度系统,其特征在于,所述链路监控模块包括:
数据收集子模块,用于通过OpenTelemetry实时监控微服务调用链并获取调用链上各微服务span数据,通过Kubernetes的CRD获取各个微服务中的运行中状态的容器数、各个微服务中的可运行状态的容器数;
数据聚合子模块,用于通过Kafka建立消息队列定期缓存收集到的span数据,使得原始数据聚合成设定长度的成片数据,然后将设定长度的成片数据按序转发给数据批处理子模块,在转发过程中保持原始数据的先后顺序;
数据批处理子模块,用于通过Flink接收并处理数据聚合子模块转发而来的成片数据,通过分析成片的span数据,得到服务依赖关系、各微服务API接口的吞吐量和执行时间;
数据存储子模块,用于将经过数据批处理得到的服务依赖关系存储到图数据库Neo4j,将各微服务运行中状态、可运行状态的容器数,各微服务API接口的吞吐量和执行时间存储到PostgreSQL数据库。
8.根据权利要求7所述的面向时延和资源利用率的微服务弹性伸缩调度系统,其特征在于,所述吞吐量预测模块包括:
吞吐量单步预测子模块,用于根据单步预测算法SVR和区间预测算法EnbPI分析根微服务吞吐量,预测面向用户的调用链第一个微服务各个API接口下一个时间步的吞吐量上界;
吞吐量多步预测子模块,用于根据线性回归算法、带上界保护的移动平均平滑化法和指数加权移动对吞吐量数据进行平滑化预处理,并使用多步预测算法Prophet分析经平滑化预处理后的数据,预测面向用户的调用链第一个微服务各个API接口多个时间步后的吞吐量上界。
9.根据权利要求8所述的面向时延和资源利用率的微服务弹性伸缩调度系统,其特征在于,所述伸缩决策模块包括:
各微服务并发量推算子模块,根据吞吐量单步预测子模块的结果、数据库中存储的信息和排队论Little's Law计算调用链各微服务在下一时间步的并发量估计值,根据吞吐量多步预测子模块的结果、数据库中存储的信息和排队论Little's Law计算调用链各微服务在未来多个时间步之后的并发量估计值;
伸缩实例数计算子模块,根据调用链各微服务下一时间步的并发量估计值计算各微服务在当前时刻需要在运行中状态和可运行状态之间切换的容器实例的数量;根据调用链各微服务下一时间步和多个时间步之后的并发量估计值计算各微服务在当前时刻需要创建或终止的容器实例数量。
10.根据权利要求9所述的面向时延和资源利用率的微服务弹性伸缩调度系统,其特征在于,所述调度模块包括:
调度插件权重优化子模块,用于根据贝叶斯优化,以最小化高功耗虚拟机节点数为目标,对Kubernetes调度插件LeastAllocated、MostAllocated、PodTopologySpread、BalancedAllocation、InterPodAffinity进行贝叶斯优化代理模型初始探索及迭代探索,以选择出Kubernetes调度插件的最终权重配置,并将探索过程中产生的或最终选择的调度插件权重配置应用到Kubernetes集群中,更新调度策略;
调度执行子模块,用于使用调度插件权重优化子模块输出的调度插件权重来进行容器调度,直到对应微服务的运行中状态和可运行状态的容器数量达到伸缩决策模块的要求,并在每次调度后均检查虚拟机节点的状态,若某个虚拟机节点上所有已创建容器均转入可运行状态,则用cgroup限制此虚拟机之上的容器进程占用的CPU时间,并仅为此虚拟机保留1个虚拟CPU而使其他CPU下线,用以降低此虚拟机节点的资源占用量,若某个虚拟机节点上所有容器均被终止,则挂起该虚拟机节点。
CN202310888466.9A 2023-07-19 2023-07-19 面向时延和资源利用率的微服务弹性伸缩调度方法和系统 Pending CN116980316A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310888466.9A CN116980316A (zh) 2023-07-19 2023-07-19 面向时延和资源利用率的微服务弹性伸缩调度方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310888466.9A CN116980316A (zh) 2023-07-19 2023-07-19 面向时延和资源利用率的微服务弹性伸缩调度方法和系统

Publications (1)

Publication Number Publication Date
CN116980316A true CN116980316A (zh) 2023-10-31

Family

ID=88480784

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310888466.9A Pending CN116980316A (zh) 2023-07-19 2023-07-19 面向时延和资源利用率的微服务弹性伸缩调度方法和系统

Country Status (1)

Country Link
CN (1) CN116980316A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117707523A (zh) * 2024-02-05 2024-03-15 中铁四局集团有限公司 一种自定义组态可视化管理方法及管理应用平台

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117707523A (zh) * 2024-02-05 2024-03-15 中铁四局集团有限公司 一种自定义组态可视化管理方法及管理应用平台
CN117707523B (zh) * 2024-02-05 2024-06-07 中铁四局集团有限公司 一种自定义组态可视化管理方法及管理应用平台

Similar Documents

Publication Publication Date Title
CN111491006B (zh) 负载感知的云计算资源弹性分配系统及方法
US9697045B2 (en) Selecting resource allocation policies and resolving resource conflicts
Choi et al. Lazy batching: An sla-aware batching system for cloud machine learning inference
CN110737529A (zh) 一种面向短时多变大数据作业集群调度自适应性配置方法
Yi et al. Toward efficient compute-intensive job allocation for green data centers: A deep reinforcement learning approach
CN113515351B (zh) 一种基于能耗与QoS协同优化的资源调度实现方法
CN113806018B (zh) 基于神经网络和分布式缓存的Kubernetes集群资源混合调度方法
CN116541176A (zh) 算力资源分配的优化方法、优化装置、电子设备和介质
CN112052081B (zh) 一种任务调度方法、装置及电子设备
CN112486687B (zh) 一种基于多任务学习时间序列的云平台工作负载预测方法
CN116980316A (zh) 面向时延和资源利用率的微服务弹性伸缩调度方法和系统
CN113110914A (zh) 一种基于微服务架构的物联网平台构建方法
CN116702907B (zh) 一种服务器无感知的大语言模型推理系统、方法和设备
CN111198754A (zh) 一种任务调度方法及装置
CN116185584A (zh) 一种基于深度强化学习的多租户数据库资源规划与调度方法
CN104346220A (zh) 一种任务调度方法与系统
Bensalem et al. Scaling Serverless Functions in Edge Networks: A Reinforcement Learning Approach
CN116302507A (zh) 基于休假排队的应用服务动态部署与更新方法
CN115913967A (zh) 一种云环境下基于资源需求预测的微服务弹性伸缩方法
KR20230068709A (ko) 스케줄러, 스케줄러의 동작 방법 및 이를 포함한 전자 장치
Du et al. OctopusKing: A TCT-aware task scheduling on spark platform
Shang et al. spotDNN: Provisioning Spot Instances for Predictable Distributed DNN Training in the Cloud
Park et al. Gemma: reinforcement learning-based graph embedding and mapping for virtual network applications
CN112199153A (zh) 一种虚拟网络功能vnf实例部署方法及装置
CN117453388B (zh) 一种分布式算力智能调度系统及方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination