APP下载

基于神经网络的云平台弹性伸缩研究

2023-01-11邹文仲张高峰章金峰

现代计算机 2022年20期
关键词:访问量副本台风

邹文仲,张高峰,章金峰

(南京南瑞继保电气有限公司,南京 211102)

0 引言

在云平台部署的气象决策系统作为电网公司内部基础应用,具有显著时间访问特征,如灾害天气来临、工作日早会等时间系统访问量会激增。此时固定云资源的部署方式不能承受激增的访问量,必然会导致系统卡顿,甚至崩溃,普通阈值弹性伸缩也存在调节之后,伸缩抖动问题。所以急需一种可以提前扩容的技术来解决上述问题。

作为Kubernetes核心的发布功能之一,弹性伸缩技术及其方案的设计与实现已成为衡量云平台服务能力的重要参考标准[1-2],现阶段对云平台弹性伸缩也做了大量研究。文献[3]对比了三种预测模型的精度,但是未给出输入参数的量化标准以及模型的适用场景。文献[4]提供的方法解决了模型空间爆炸及算法可伸缩性受限问题,未考虑如何预测工作负载变化。文献[5-7]介绍的弹性伸缩方案只考虑了系统集群CPU和内存指标,没有考虑应用的具体业务统计指标,当超大负载到来时,由于动作滞后性依然不能解决系统卡顿问题,文中同样也未考虑预先伸缩,时效性不足。

因此,本文提出了一种基于神经网络预测访问量的弹性伸缩方案。方案采用五层BP神经网络预测系统,通过反馈机制训练神经网络中的权值来逐渐优化预测结果,并构建了基于Ku⁃bernetes原生自定义指标接口与HPA交互完成伸缩。该方案让容器伸缩先于访问流量的突变,减少系统的卡顿和抖动,实现最高层级系统弹性伸缩。

1 参数预处理及网络模型设计

1.1 BP神经网络介绍及权值训练

BP神经网络是一种多层的前馈神经网络,其主要的特点是信号前向传播,误差反向传播。神经网络的上一层输出数据是下一层的输入数据。原始的输入数据,通过第一层隐含层的计算得出的输出数据,会传到第二层隐含层,从而依次类推,神经网络的层级数根据实际数据进行设置[7-8]。

神经网络的训练过程分为两部分:向前传播得到预测数据以及反向传播更新权重,流程如图1所示。

图1 神经网络训练过程

1.2 输入参数预处理及网络模型设计

影响气象决策系统访问量的因素主要有日期、主要城市温度、台风状态、山火状态、线路覆冰状态等。其中日期因素主要分为工作日、休息日,不同日期因素影响下系统的访问量存在一定差异;温度因素包括日最高气温、最低气温等,气温的高低影响访问量变化;台风因素主要有台风是否在24小时警戒线内,台风预测是否登陆,台风强度。天气因素即天气类型,主要分为晴、多云、阴、雨、大雨、雪等类型[9]。量化的原则是数值类数据保持不变,如温度;互斥类数据采用布尔型变量,用1代表是,2代表否,如若是工作日,则D等于1。具体量化规则如表1所示。

表1 系统访问量影响因素量化规则

神经网络初始输入层节点数为表1的八个量以及当前Pod数量以及综合负载率,以上数据相差较大,神经网络不容易收敛,神经元会出现饱和现象。为了避免以上情况,采用类似标幺值的方式对输入量进行归一化预处理,把所有量值限制在同一等级,待预测完成后,再转化成实际值,规则如下:

归一化处理:

归一值转换为实际值:

式(1)和式(2)中xmax、xmin分别为某项输入量的最大值、最小值。xi、yi为某项输入量归一化之前及之后的值。本文主要对非布尔变量做归一化处理,布尔型变量维持不变。

完成输入数据的预处理后,考虑到系统收敛速度及输出精度,构建了单隐含层的五层神经网络,输出量为预测综合负载率,隐含层的节点数N通过经验公式和试凑法进行确定,经验公式为

式(3)中,N为隐含层节点数,m为输入层节点数,l为输出层节点个数,q为调节常数,取值范围为[1,10]。

2 云原生自定义指标接口设计

Kubernetes上的弹性伸缩会在节点和服务两个粒度进行。弹性伸缩分为垂直弹性伸缩(Ver⁃tical Pod Autoscaler,VPA)和水平弹性伸缩(Horizontal Pod Autoscaler,HPA)。垂直弹性伸缩是指调整节点或服务的资源配额,水平弹性伸缩是指调整节点或服务的数量[5]。垂直伸缩对应用系统本身无感,但是对云服务器要求较高,此外单台服务器的资源有限,业务高峰时可能无法满足要求。水平伸缩则是要求应用系统是无状态的,伸缩过程中系统之间通过调用关系进行实时调整。因气象决策系统采用微服务的开发架构,水平弹性伸缩更适合解决访问量激增的问题,故本文基于水平弹性伸缩进行自定义指标接口设计。

常规HPA的判据是Pod的CPU或者内存使用率,基本原理是Metrics Server会持续采集Pod的指标数据,HPA控制器通过Metrics Server的API获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标Pod副本数量。当目标Pod副本数量与当前副本数量不同时,HPA控制器就向Pod的副本控制器(Deployment、RC或Rep⁃licaSet)发起scale操作,然后副本控制器会调整Pod的副本数量,完成扩缩容操作,具体过程如图2所示。

图2 HPA控制器原理图

对于使用自定义指标的HPA,上述方案就不适用了,为此设计了基于第三方监控软件的自定义指标接口。首先搭建Metrics Server,在Kubernetes1.7版本中引入了聚合层,允许第三方应用程序通过将自己注册为API附加组件来扩展Kubernetes API。Custom Metrics API和聚合层可以让监控系统向HPA开放第三方应用程序的指标。

目前业界通常使用Promethues来监控Kuber⁃netes系统。Promethues可以获取应用自定义的指标数据,并将其注册到Kubernetes系统中供HPA读取,进行扩容缩容操作,所以本文采用Prometheus来实现基于自定义指标的弹性伸缩。数据接口示意如图3所示,图中PromQL相当于用sql语句来完成数据查询,即通过中间表的形式完成神经网络与HPA的通信。详细流程如下:

图3 自定义指标API部署示意图

(1)BP神经网络把运行结果存入中间表中。

(2)由Prometheus监控程序定时去获取最新的指标数据,并由Kube-state-metrics模块汇总。

(3)Custom Metrics API模块中的Adapter从Prometheus得到业务数据,转成Kubernetes支持的格式。

(4)HPA定时通过Metrics API中的kubeaggregator获取第三方指标数据完成后续功能。

3 考虑综合负载弹性伸缩方案

当应用Pod数大于1时,采用单一Pod的CPU使用率作为比较基准不够精确,因此本文设计了综合负载作为比较指标。所谓综合负载,即考虑所有副本Pod的资源使用情况的负载,可以是单一的CPU、内存综合负载,也可以是考虑多种因素的综合负载。应用Pod的资源使用情况可以通过监控组件Promethues实时采集,数据传输流程参照图3。本文以电网公司气象决策系统为例,考虑到后台服务绝大多数是数据的计算,以CPU综合负载进行说明。CPU综合负载的计算方法为

其中Cused是综合负载,n表示Pod的个数,Urequest为Pod分配的CPU数量,Uiused为第i个Pod的CPU使用数量。

本文的伸缩方案采用横向模式,采用五层BP神经网络,流程为:首先用神经网络预测出结果,比较结果和设置的阈值来决定是否要进行伸缩,假如综合负载超限则把结果回馈至神经网络重新训练。流程设计中不仅设计HPA模块的伸缩,也有神经网络的反馈。神经网络的反馈机制基本准则是若神经网络预测结果不能满足系统指标要求,则把预测结果修正后重新训练网络并观察系统指标,直至系统指标满足要求。详细集群扩容、缩容方案如下所示。

图4 系统扩容缩容流程图

(1)神经网络模块系统获取影响系统访问量的因素如:日期类型、天气类型、台风、山火个数、应用Pod实时数量以及实时综合负载等,并对输入量参数归一化处理,根据获取的因素用BP神经网络计算未来一段时间系统的预测综合负载Cpre。

(2)设置综合负载阈值参数Tu、tolerance。Tu为伸缩阈值,此值根据分配Pod的CPU、内存相关,tolerance为弹性阈值,根据系统实际情况取值,本文取0.1。

根据以上参数计算综合负载扩容阈值及缩容阈值up=Tu*(1+tolerance),down=Tu*(1-tolerance)。

(3)把神经网络预测综合负载Cpre以及实际综合负载Cused一同传入HPA资源对象进行扩容和缩容操作。扩容的判据为Cpre>up,缩容判据为Cused

(4)对扩容或者缩容后系统的实际综合负载进行观察,看是否在规定的范围内。

(5)若在规定范围为,结束流程;若不在规定范围内,把误差e反馈给神经网络进行新权值的训练完善,当修正后的权值计算得出的综合负载满足要求后,流程结束。

对于系统缩容功能,提前缩容会导致运行Pod资源使用率迅速增长,故对缩容的判据为实际综合负载小于设置的缩容阈值。神经网络的训练需要一定的时间,故前期测试时对应用Pod副本数没有限制,待系统稳定运行后,对Pod副本数进行限制,继而在流程中加入此项数值的判别[10]。

4 工程应用分析

本文所述伸缩方案已成功应用于南方电网试点项目中,所用Kubernetes集群为1.7版本,集群有3个master节点(主备),11台node节点,单个应用Pod资源分配为:CPU为3core,内存为8 G,观察台风来临时刻系统Pod数量、资源使用情况以及网页访问速率。台风1发生时刻采用普通弹性伸缩方案,判据为CPU使用率超过80%进行扩容;台风2采用了本文神经网络预测方案。

图5展示了台风1来临时刻系统资源使用情况。台风登陆时,系统的访问量激增,普通弹性负载具有一定滞后性,在21:45系统负载流量激增时,伴随着CPU负载的提高,POD数量也逐渐增加,但是此时POD数量增加的速度还是跟不上负载的增长,所以综合负载一直居高不下。伴随着访问量的稳定,POD数量也扩充到9个左右,此时,综合负载也快速下降,逐渐达到稳定状态,单个Pod维持在2.3core左右CPU使用量。

图5 台风1登录时系统资源使用情况

图6展示了台风2登录时系统资源使用情况。在14:58流量开始激增前,根据神经网络的预测,提前把POD的数量扩增至5个,此时流量的增长没有对Pod中CPU造成任何压力,综合负载平稳增长。伴随着流量的继续激增,神经网络在15:04时把POD数量扩展至9个,此时,综合负载维持在75%左右,并没有无节制的攀升至Pod崩溃,最终单个Pod维持在2.4core左右的使用量,且过程平稳,未出现单个Pod的资源使用率激增导致卡顿的现象。

图6 台风2登录时系统资源使用情况

工程应用结果表明,神经网络预测方案的使用,让系统做到了提前扩容,无论是系统综合负载还是系统访问平均等待时间都更趋向平稳,系统体验及可靠性得到了显著提升。

5 结语

本文设计了一种基于Kubernetes云平台的弹性伸缩方案。该方案首先对影响系统访问量的因素进行量化归算作为神经网络预测算法的输入,通过HPA调用云原生自定义指标接口来控制弹性伸缩。工程应用结果表明,该方法可以增强应用集群的高可用能力,降低集群因流量暴增而导致服务卡死的几率,提升了系统体验。下一步将在神经网络的预测中引入更多的变量,进行中长期的负载预测,让系统更加健壮。

猜你喜欢

访问量副本台风
台风过韩
台风来了
使用卷影副本保护数据
面向流媒体基于蚁群的副本选择算法①
一种基于可用性的动态云数据副本管理机制
高职院校图书馆电子资源中数据库的使用情况分析
如何做好搜索引擎优化(SEO)提高新闻网站访问量
如何做好搜索引擎优化(SEO)提高新闻网站访问量
一所大学有40人被确诊为抑郁症
台风天外出小心