在云计算高速发展的大背景下,硬件资源高度集中,结合软件形成了庞大的应用系统,在石油勘探行业这种趋势更为显著。硬件资源的分配情况将直接影响应用系统的运行效率。通过互联网调查公司发布的数据显示,在软件运维过程中,CPU、内存、网络、临时盘空间这些因素,对应用系统运行效率会产生比较重要的影响,这些资源的不足往往会造成应用系统速度变慢,运行效率降低,影响用户的体验。因此,通过对应用软件模块资源应用分析研究,开展一定时间的数据采集和挖掘,并对已知的资源需求进行标定,通过机器学习、人工智能手段深入的发掘资源消耗的规律性因素,建立一种监控指标与应用软件运行资源需求预测模型,采用神经网络、机器学习技术,对资源需求进行预测,主动进行主机资源运行优化,减少资源分配问题对用户工作效率的影响,能有效提高系统管理工作的信息化水平。随着互联网和大数据的发展,数据的丰富度和覆盖面远超出了人工可以观察和总结的范畴。结合了统计学、数据库科学和计算机科学的机器学习已成为人工智能和数据科学发展的主流方向之一。分类问题作为机器学习的一部分,成了研究的重点[1]。以深度学习为代表的机器学习是当前最接近人类大脑的智能学习方法和认知过程,充分借鉴了人脑的多分层结构、神经元的连接交互、分布式稀疏存储和表征、信息的逐层分析处理机制,自适应、自学习的强大并行信息处理能力,在语音、图像识别等方面取得了突破性进展,在诸多应用领域取得巨大商业成功[2]。邬春明等[3]结合极限梯度提升算法和实体嵌入网络,提出了一种基于XGBoost-EE的电力系统暂态稳定评估方法。徐伟等[4]为了降低网络入侵检测系统的虚警率,提出一种混合式网络入侵检测方法,将人工蜂群算法用于特征提取,XGBoost算法用于特征分类和评价。张颖等[5]针对恶意的第三方厂商在电路设计阶段中植入硬件木马的问题,提出一种基于XGBoost的混合模式门级硬件木马检测方法。孙朝云等[6]为了科学有效地评估高速公路服务区交通通行服务能力和进行基础设施优化配置,提出一种基于改进粒子群算法和XGBoost融合的高速公路服务区交通量预测模型。赵力等[7]针对采用遥感技术监测氮、磷研究中反演模型精度不够高、小尺度水体研究受限于数据源分辨率的问题,提出了一种结合高分一号影像和XGBoost模型的水体总氮、总磷浓度反演技术。陈庄等[8]为了进一步提升水务企业工作效率,解决抄表数据审核工作量大、保证数据准确性等问题,在传统的XGBoost预测算法基础上提出一种基于MIC-XGBoost的混合预测模型。
1总体架构
通过采集模块对软件模块的运行数据进行采集,并对这些数据进行数据标定,基于机器学习技术,对不同的模块来进行资源的特征画像,系统根据不同类型软件模块对资源的需求情况,设置不同的调度策略,从而实现主机智能部署调度、智能控制。系统总体架构如图1所示。
2获取计算机运行数据
在计算机安装运行数据采集插件。进程采集模块基于Go语言开发,使用了go-cmp、text、fakescraper、go-seq、process-exporter、client_golang、common、procfs、sys、xer-rors、protobuf、check、yaml模块,采集计算机CPU利用率、内存占用、磁盘读写、网络带宽等相关数据,并将采集的监控数据按照时间保存到MySQL数据库中。采用多线程轮询的模式向采集代理程序拉取指标数据,并将采集的数据保存到时序数据库中。
3软件模块与进程关系分析
分析石油勘探专业软件运行机制。以Omega软件为例,Omega在提交作业后一般产生单个主进程,主进程在进行作业调用模块时,通过调用动态链接库的模式来工作,不再产生新的进程,传统通过进程来获取模块信息的方式已经不能满足需求。经研究Omega的运行方式、进行特点和软件目录架构发现,这些模块的动态链接库都保存在Omega的安装目录的lib下,通过[lsof]获取这些模块链接库的调用栈,并与当前运行环境的进程列表进行匹配,就能够获取Omega作业当前所运行的模块情况。Omega进程采集原理如图2所示。采集过程包含了多个步骤。读取配置文件,加载MySQL数据库连接参数,接口参数,定时任务参数;创建数据库连接对象,读取module_type(模块总表),检验模块对应指标表是否已创建,如未创建,则根据module_indicators(模块样本参数模版表),创建对应模块的样本数据表;根据接收的命令参数,执行一次性的数据生成过程或定时过程;一次性数据的生成过程需要指定一个起始时间,从起始时间开始,每10min的某模块的采集数据作为一个样本存入对应模块的样本数据表;定时过程是从程序运行时开始,每10min进行一次样本数据的汇总入库操作;总样本数据操作,按照查询模版的配置查询监控采集服务器,并将多个指标在10min区间的数据整合成一个样本数据,入库MySQL对应模块的样本数据表。通过对石油勘探生产环境下的Omega运行目录和当前运行作业流程文件进行对比,发现Omega的模块以动态链接库.so的方式来加载和调用,当作业流程需要调用某一个模块的时候,Omega主进程会将对应的模块链接库动态的加载到内存中。
4机器学习
4.1样本数据预处理
采集的集群节点运行指标数据,为保证效率,首先保存在时序数据库中,实时数据保存180天,训练样本数据长期保存,并通过转储工具,将处理后的实时数据保存到MySQL数据库中作为样本数据,再以API的方式来为机器学习提供训练数据集。将时间序列数据提取最大值,均值,方差等转换成特征数据。并对数据做归一化、缺失值处理,对处理后的数据集进行特征选择,选取与标签相关性最好的若干个特征作为模型训练的特征,再进行必要的数据分组或者分割。
4.2机器学习
机器学习软件采用Python语言进行开发,使用了xg-boost、numpy、pandas、random、os等模块,对采集到的数据做特征工程,对数据进行升维,为多维度特征挖掘提供数据基础。去除空值:data.dropna()提取各列特征数据的最大值:data_mk_max=data.groupby(['sample_id'],sort=False,as_index=False).max()提取各列特征数据的平均值:data_mk_mean=data.groupby(['sample_id'],sort=False,as_index=False).mean()提取各列特征数据的方差:data_mk_var=data.groupby(['sample_id'],sort=False,as_index=False).var()将标注的训练数据集作为XGBoost算法的输入样本,进行训练,获得模型,输出模块类型。然后利用验证数据集对训练后的模型进行验证,若满足精度要求,则获得训练好的模型,利用训练好的模型,对作业模块类型进行预测,给出预测的模块类型。根据已知软件模块的需求,来预测其它软件模块的资源需求类型,按照目前给定的资源需求类型可以分为4类:CPU密集型、内存密集型、临时盘密集型、以上均不是,因此,在指标的选择上也主要围绕以上几类资源类型来进行选择,通过对采集的监控指标进行分析,明确用于模块资源预测所需要的指标数据包含:内存总量、模块CPU占用率、模块内存占用率、模块磁盘占用率、当前节点CPU占用率、当前节点内存占用率、当前节点磁盘占用率、时间戳,共计8个指标。通过对比决策树算法、随机森林、支持向量机、BP神经网络、XGBoost等算法,根据实际采集数据情况,采用XGBoost算法来进行预测。极限梯度提升树算法是Boosting集成算法的一种,通常以决策树为基学习器,新生成的树不断学习当前树预测值与真实值之间的残差,最终将多棵树的学习结果累加作为预测结果。由于XGBoost算法是基于树模型的,当决策树的数量过多时,则会出现过拟合。除了调整决策树个数、迭代速率和树模型最大深度等参数控制复杂度外,XGBoost算法在求解最优树结构过程中引入正则化策略来控制模型整体过拟合程度,XGBoost算法在最小化目标函数过程中不断调整生成新的树结构,最终目标函数与树结构(包括每棵树的深度、叶子节点数量、叶子节点位置等)紧密相关,因此,利用该算法本身不断减小偏差、限制方差、生成最优树结构的特性可创造大量新特征集[9]。XGBoost算法实现的关键参数样例:n_estimators=200#弱决策树数量max_depth=5#树的最大深度learning_rate=0.1#学习速率gamma=0#最小损失函数下降值subsample=0.8#样本随机采样比train_percentage=0.8#样本分割比例,训练样本占比self.min_child_weight=6#最小样本权重的和reg_lambda=1#L2正则化项参数reg_alpha=0#权重L1正则化项seed=0#复现随机数据结果col_sample_by_tree=0.8#特征随机采样比将预处理完成的数据导入模型,进行模型训练,通过对模型准确度反馈,以及对参数重要性指标的分析,不断调节参数,找到最合适的参数。模型训练流程如图3所示。按照训练模型数据预处理流程,将实时数据做处理,导入已有模型,根据模块的实时数据进行模块分类。模型预测流程如图4所示。通过业务人员对分类结果进行确认,填充样本库,用新的样本库重新训练模型,不断优化模型。模型优化流程如图5所示。
5云主机调度
通过模块资源需求类型与主机总体资源情况相结合,建立云主机调度策略,将不存在资源竞争的虚拟机调度到同一台物理机服务器上,在减少资源竞争的同时,尽可能地发挥主机的最大利用率。周平等[10]提出基于马尔科夫预测模型的云资源调度算法,实现节点负载判断、待迁移任务和节点选择、迁移路由的决策,以解决云服务节点失效情况下的任务调度和负载均衡问题,实现快速的云服务故障恢复,提高云服务的可靠性。宋维佳等[11]提出作为云计算的重要支撑技术,虚拟化提供了热迁移、负载转移等技术丰富了云计算资源调度手段。利用这些技术,资源调度要解决如何将计算资源合理分配给服务,一方面保证在负载动态变化的情况下服务质量不受影响,另一方面减少数据中心的能源消耗。调度原理如图6所示。基于模块类别和占用资源的情况,根据当前服务器正在运行的模块分类,将要运行的模块进行分配调度,以保证发挥服务器的最大能力,即在有限的计算能力下运行更多的模块,这是典型的最优化问题。对比爬山法、遗传算法、动态规划等算法,动态规划算法(dynamicprogramming,DP)是由美国数学家R.E.Bellma求解多决策问题时提出的一种优化算法,特点在于搜索效率髙,结果稳定可靠,从而受到广泛的关注[12]。针对要解决问题的特点,采用动态规划算法来进行主机调度模型的建立。利用预测好的模块类型,分析作业的资源占用情况,以目前各个节点的作业类型为基础,计算新发布的作业所在的节点的资源占用是否超过物理机上限,若存在物理机超上限,则运用动态规划算法,根据当前物理机、虚拟机节点的CPU计算核心数量、CPU负载、内存、缓存、IO时延等指标数据,对虚拟机进行迁移,使得迁移后的节点资源占用都在物理机的接收范围内,对云主机资源合理分配。6软件主要功能实现了应用软件模块资源占用监控,针对已知资源需求的应用模块资源占用建模,使用机器学习算法训练模型,通过机器学习确定勘探开发应用其它功能模块的资源需求。通过虚拟机运行作业的资源占用,将资源互补的虚拟机迁移到同一物理机。主要功能包括:模块资源监控、训练集管理、模型训练、方案管理、迁移查询、作业查询等。通过采集专业软件如Omega的作业模块数据,并保存到数据库中,通过多维度的查询条件,反映一段时间内模块占用的CPU、内存、磁盘、网络的情况,方便用户对一段时间主机运行软件模块资源占用情况进行掌握。模块资源监控:主菜单中“资源调度”→“模块资源监控”;点选“函数”“时间”“指标”“模块”等查询条件,点击查询。查看各个维度采集数据曲线。训练集管理:主菜单中“资源调度”→“训练集管理”;点选“新增”,进入节点运行监控,点击新增训练集,填写信息,点击保存,在训练集列表中可查看到新增的模块信息。点击训练模型后的修改,填写信息,点击保存,在训练集列表中可查看到已修改的模块信息。在训练集管理中配置好训练集之后,即可进行机器学习的模型训练,预测需要预测的模块的信息,且可以配置训练算法的参数值,以方便更好地进行模型训练。包含模型训练、模型预测、虚拟机实时数据和调度方案四个接口。模型训练:主菜单中“资源调度”→“模型训练”;点选“模型训练”,选择“继续执行”或“查看上次结果”,查看模型训练的执行结果。同理,点选“模型预测”“获取虚拟机实时数据”“模型调度”,查看各个流程的执行结果或上次执行结果。方案管理:主菜单中“资源调度”→“方案管理”;点选“起始时间”,点击“查询”,查看虚拟机调度方案的执行结果,点击“查看”按钮。进入详情页面,查看方案具体信息。点击“方案运行”按钮,运行该方案的虚拟机调度。模型调度:查看虚拟机调度方案的执行结果。进入详情页面,查看方案具体信息。点击“方案运行”按钮,调用虚拟机热部署命令,运行该方案的虚拟机调度。迁移查询:主菜单中“资源调度”→“迁移查询”;设置时间段,物理机或虚拟机名称,点查询。可以查看一段时间内物理机上曾经有过哪些虚拟机。可以查看一段时间内某个虚拟机在哪些物理机上运行过。点击查看详情,查询虚拟机迁移的历史记录。包含时间、虚拟机、物理机的查询,查询结果为这段时间内虚拟机由源物理机迁移到目标物理机的开始、结束时间。作业查询:主菜单中“资源调度”→“作业查询”;设置时间段,点查询。可查询虚拟机上运行过的作业。点击查看详情,可查询相关作业运行过程中虚拟机迁移历史。
《石油勘探应用软件的资源需求分析及预测方法》来源:《信息技术与信息化》,作者:董涛 段淼 车晓萍 孙友凯