基于深度学习的容器化Flink上下游负载均衡策略研究

2023-03-15 03:50艾力卡木再比布拉段晓东
大连民族大学学报 2023年1期
关键词:内存利用率容器

艾力卡木·再比布拉,甄 妞,黄 山,段晓东

(大连民族大学 a.计算机科学与工程学院;b.大数据应用技术国家民委重点实验室;c.大连市民族文化数字技术重点实验室,辽宁 大连 116650)

在现今的社会,大数据处理广泛应用于电子商务、O2O、物流配送等领域,协助企业不断地发展新业务,创新运营模式。Flink[1]作为新一代的大数据计算引擎,能够以数据并行和流水线的方式执行批处理和流处理任务,相较于上一代大数据处理框架Spark,具有低延迟、高吞吐、高性能等优势。随着Docker[2]容器技术的发展,Flink等大数据应用都逐渐走向容器化。并且利用Kubernetes[3]等编排工具去管理容器化应用。

由于Flink集群有异构性并且Flink本身没有均衡负载的能力,很多学者利用RNN、LSTM[4]等机器学习技术去提前预测负载并进行调度。文献[5]通过区域划分和基于人工萤火虫优化的算法实现负载均衡。文献[6]设计了双向的LSTM来对云计算资源的动态变化的复杂特性进行预测。文献[7]将ARIMA与自回归神经网络相结合,对云服务器上的实时资源情况进行预测,实验证明,该模型与其他单一模型相比,预测结果更加精确。文献[8]提出了Flink环境下基于负载预测的弹性资源调(LPERS-Flink)策略。文献[9]通过将超载节点上的容器迁移到低负载节点,降低系统通信开销,提升集群的吞吐量与计算效率。文献[10]通过优化支持向量机构建负载预测模型,对单步与多步云计算资源负载进行预测分析。文献[11]使用递归神经网络RNN来实现对云工作负荷的预测,通过Google Cloud Trace数据集上的实验验证了该方法的准确性。文献[12]首先使用ARIMA模型进行预测,再使用ENN模型对ARIMA误差进行预测,最终得到修正后的预测值。该文献提出的组合预测模型有效提升了云环境中工作负载预测的精度。文献[13]提出了一种基于自回归移动平均模型ARIMA与长短期记忆网络LSTM的组合预测模型,预测精度相比其他预测模型有明显的提升,降低了云环境中对资源负载的实时预测误差。

容器化部署Flink时,由于下游算子所在容器无法预知上游算子传输的数据量,导致上下游算子的容器内存分配不均衡问题。针对此问题,本文提出基于深度学习的容器化Flink上下游负载均衡框架,提出C-BiLSTM预测模型,使用CEEMDAN分解方法和BiLSTM相结合的预测方法预测Flink下游所需内存利用率,并依据预测结果对下游容器的伸缩操作。

1 负载均衡系统

1.1 问题描述

Flink中TaskManager结构如图1。Flink中每一个TaskManager是一个JVM进程,它可以启动多个独立的线程,来并行执行多个子任务(subtask)。TaskManager的计算资源是有限的,并不是所有任务都可以放在一个TaskManager上并行执行。并行的任务越多,每个线程的资源就会越少。为了控制并发量,Flink需要在TaskManager上对每个任务运行所占用的资源做出明确的划分。由于下游算子所在容器无法预知上游算子传输的数据量,导致上下游算子的容器内存分配不均衡问题。

图1 Flink中TaskManager结构

1.2 架构概述

系统架构如图2。Flink提交作业到伸缩模块和Kubernetes集群上,监控模块获取节点数据并传给预测模块进行数据处理和预测任务。预测结果传回到伸缩模块进行伸缩,最后传给Flink进行容器的初始化操作。

图2 系统架构图

本文提出的负载均衡策略由监控模块、预测模块和容器伸缩模块构成。监控模块获取到容器资源负载数据,传送给预测模块,预测模块对时序列数据进行数据的预处理并预测下游容器所需要的内存利用率,并把预测结果传给容器伸缩模块,最后伸缩模块根据预测的结果提前对下游的容器数量进行伸缩操作来避免上下游之间的负载不均衡。模块之间的交互流程如图3。

图3 模块之间的交互流程

监控模块本文采用Prometheus监控组件监测集群负载信息,框架图如图4所示。在容器中部署Prometheus目标,收集部署Flink的容器的CPU负载信息,这些信息由Pushgateway收集汇总。利用Prometheus的服务发现组件,连接Kubernetes收集容器的内存负载信息。Prometheus服务器部署在集群的主节点上,分别从Pushgateway和服务发现组件中拉取CPU及内存负载信息,并将这些信息保存到TSDB数据库中。收集的信息由Grafana导出到预测模块处理。

图4 Prometheus体系架构图

1.3 资源负载预测模块

资源负载预测模块主要作用是对容器的监控数据进行预测分析,预测容器资源未来负载情况,然后将预测结果发送给资源伸缩模块,为资源伸缩工作提供决策支持。

(1)数据预处理。数据预处理首先获取监控数据中的时间序列数据后,对此进行重采样,并删掉数据不合法的值。在对数据进行填充缺失值操作。数据预处理过程的伪代码见表1。

表1 容器资源负载时间序列预处理过程

(2)负载预测。本文提出一种组合预测模型C-BiLSTM模型,将CEEMDAN方法和BiLSTM模型结合,使得分析时间序列变得更加精确。CEEMDAN方法可以有效分析时间序列中的信息,将时间序列分解为不同的频率、趋势特征的分量,彼此之间相互独立。因此使用CEEMDAN方法进行时间序列特征分析可以减少预测误差,增大预测精度。BiLSTM模型具有强大的学习能力,可以有效地针对容器中的资源负载时间序列进行预测,获得精准的预测结果。C-BiLSTM模型的预测流程,其主要步骤如图5。

图5 C-BiLSTM模型流程图

基于CEEMDAN方法将原始时间序列分解为一系列的IMF分量和res残差序列,其中IMF分量就是原始时间序列中不同趋势特征的分量,而res残差序列就是原始时间序列的长期的,整体的变化趋势;将IMF分量和res残差序列分别作为BiLSTM模型的输入,进行训练和接收预测值,最后得出预测结果;LSTM结构如图6。LSTM用内部自循环结构来控制信息流,通过输入门、遗忘门、输出门三个非线性门控单元和一个记忆单元来控制信息的流通和损失。遗忘门由一个sigmod神经网络层和一个按位乘操作构成,用来遗忘一些不必要的信息,遗忘门决定了上一时刻细胞状态中的哪些信息将被遗忘。记忆门由输入门与tanh神经网络层和一个按位乘操作构成,与遗忘门相反,记忆门决定输入信息x(t)和上一时刻输出信息h(t-1)中的哪些信息被保留。输出门与tanh函数以及按位乘操作共同作用将细胞状态和输入信号传递到输出端。LSTM无法编码从后向到前向的信息,因此本文使用由前向与后向LSTM组成的BiLSTM模型。BiLSTM网络就是在LSTM网络中使用两套连接权重分别沿前向时序和后向时序对同一序列进行建模。BiLSTM网络结构图如图7。x(t)表示序列中第t帧的特征向量,其中t=1~T,T是样本序列中的总帧数。在BiLSTM网络中x(t)被LSTM网络分别沿前向时序和后向时序处理并输出信息h(t)。对得到的各个IMF分量和res残差序列预测结果进行合并,合并计算过程如公式(1)。

(1)

图6 C-BiLSTM模型流程图

图7 BiLSTM网络结构图

容器资源负载模型训练伪代码见表2。读取监控获取的容器资源负载数据,经过对此数据预处理后进行CEEMDAN分解,得到IMF分量和res残差序列并进行检查有无异常,将分量后的数据交给BiLSTM网络进行训练,最终得出预测结果。

表2 容器资源负载模型训练流程

1.4 容器伸缩模块

本文的伸缩模块是基于预测模块的输出并提前进行调整下游容器数量来达到上下游负载均衡的目的。从预测模块获取到预测结果,计算下游容器数量是否需要进行伸缩操作。并按照判断结果,提前对下游容器数量进行伸缩操作。本文容器伸缩模块的流程如图8。

图8 容器伸缩模块流程图

2 实验测评

2.1 实验环境配置实验在两台云主机所组成的集群上进行,采用一主一从结构,实验环境见表3。

表3 实验环境

2.2 数据集和预处理

为了验证本文提出的C-BiLSTM模型的资源负载预测效果,使用了通过监控Flink作业的上游容器工作负载得到的数据集来进行资源负载预测实验,数据集包含了一系列真实场景下的工作负载,本数据集包含的指标有容器的CPU利用率和内存利用率以及磁盘利用率。CPU利用率是集群信息中的重要指标,由于Flink内部上下游容器是共享整个pod的CPU资源,所以本文主要预测指标是内存利用率。

2.3 实验结果与分析

在对本文模型进行训练之后,使用本文模型对15个采样点的数据进行了预测,预测结果与真实值的对比如图9。本文模型与真实值的数据非常接近,预测误差非常小,即使是在面临突发负载时预测效果也很好,大部分采样点的数据曲线贴合效果比较好,证明了本文模型具有很好的预测效果。

图9 真实内存利用率与预测内存利用率对比

本文方法预测的下游所需容器数量与实际所需窗口数量的对比如图10。可以看出预测下游容器数量并且与实际所需容器数量基本的误差很小,验证了本文提出的伸缩策略的有效性。

图10 实际下游所需容器数量与预测下游

为更好的说明本文模型的预测效果,选取了三种不同模型RNN、LSTM和EMD-LSTM作为对比模型,然后与本文模型进行对比验证,这些模型的预测误差指标值对比如图11。本文提出的C-BiLSTM模型的所有预测误差指标都要低于三个对比模型,并且要比EMD-LSTM模型误差要更低,说明本文模型的预测误差都很低,使用CEEMDAN方法来对时间序列的分解进行优化也是有效的。说明本文提出的C-BiLSTM模型可以针对时间序列数据,有效地对时间序列数据进行处理,消除数据的波动性,从而提高了Flink上下游负载序列的预测精度,降低预测误差。

a)不同模型内存利用率均方根误差(RMSE)

b)不同模型内存利用率平均绝对百分比误差(MAPE)图11 不同预测模型内存利用率误差对比

不同数据规模数据的运行时间如图12。提出的基于C-BiLSTM模型之负载预测的弹性伸缩策略明显比Flink减少了约20%的运行时间。

图12 不同数据规模任务运行时间对比

图13 不同类型任务负载运行时间对比

为验证负载均衡策略的有效性,使用WordCount、PageRank和TeraSort三种不同类型的计算任务来对策略评估,结果如图13。从实验结果可以看出,本文提出的伸缩策略与Flink默认算法比,在运行时间上,均有一定的优化效果。其中,在PageRank任务上的优化效果最为明显,这是由于PageRank属于计算密集型作业,而WordCount属于数据密集型作业,TeraSort属于I/O密集型作业,后两种作业中消耗较多的I/O资源,而本文提出的调度算法在资源均衡方面主要考虑了CPU和内存的使用率,故算法在计算密集型作业上的优势较为明显。

3 总结与展望

本文提出的Flink上下游负载均衡策略,通过深度学习的方法对Flink上游容器进行分析来预测下游所需要的内存利用率,以此提前对下游容器数量进行伸缩,使上下游容器的负载进行均衡,减少下游处理时间和上游的等待时间。经实验验证,该算法可以缓解下游容器的内存资源不够的问题,让任务的处理时间得到了明显的缩减。受研究环境有限,本实验仅使用了数据量不够大的数据集进行实验。以后需要在更大的数据集及更多流数据上应用,以进一步验证该策略的有效性。

猜你喜欢
内存利用率容器
容器倒置后压力压强如何变
2019年全国煤炭开采和洗选业产能利用率为70.6%
难以置信的事情
“春夏秋冬”的内存
化肥利用率稳步增长
浅议如何提高涉烟信息的利用率
板材利用率提高之研究
取米
内存搭配DDR4、DDR3L还是DDR3?
基于内存的地理信息访问技术