CRISPRCRISPR07-12 10:48

机器学习来预测硬盘故障

随着AIOPS越来越热,有一群系统研发工程师正在努力尝试利用机器学习和大数据让苦逼的运维保障工作变得高大上, 比如流量请求智能调度,服务异常自动修复,机器故障提前预测等等。

机器学习

通过对历史数据的挖掘和机器学习,总结数据规律,实时指导分析出网站服务是否异常,服务器负载是否过高,网站是否遭受攻击等等线上可能存在的问题.

攻击流量自动检测

常用的DDos攻击方法有:SYN Flood、 DNS Query Flood、 HTTP Flood、慢速连接攻击、以及P2P网络的攻击。抵挡方法一般为针对每种攻击手段,统计syn syn_ack ack rst fin push_ack udp dns icmp http-get http-post等包的接收频率和比例,来判断属于何种攻击,然后采取相应的抵挡策略。但在实际操作就会遇到一些问题 - 首先,不同应用,服务规模大小不同,服务类型不同,因此不同包的接收频率和比例不是固定的,对于混合类型攻击就更难准确设定相关的阈值;其次,对于新的攻击类型,如果没有经验,就不能及时发现。

为了解决上述问题,能自动发现攻击,以及发现新的未知类型的攻击,我们已经开始在使用机器学习的方式,根据不同网络包的日志数据,自动学习出不同网络攻击类型的攻击流量的模型,提前将攻击流量清洗掉。尤其是新的未知类型的攻击,我们期望在攻击规模尚小,还不足以影响业务时,就能被我们发现并开始学习模型。

硬盘故障预测

每天硬盘出错的概率在是万分之一左右,当你只有1台服务器10块硬盘,服务器硬盘出错的概率就会上升到千分之一,当我们有百万级服务器,千万级硬盘,多块硬盘同时出错的情况会成为常态。如何在硬盘出错的情况下保证数据不丢失,保证服务不受影响?数据存储通常会有多个备份,如mysql 主备库,GFS文件默认3个备份。有数据显示,在海量数据存储平台上,如果多个硬盘同时出故障,那么这些硬盘上存储着同一个文件的备份的概率已经很高。换句话说,如果同时多块硬盘出故障,那么就必然会导致某些文件丢失。对于在线服务,很多服务都依赖本地文件,如果硬盘出故障就必然导致这些在线服务异常,甚至不能提供服务。

因此我们需要有一套系统能提前告诉我们哪些硬盘会出错,数据可能丢失。有很多因素会导致硬盘故障,最常见的有以下几种:
1. 外部振动
2. 温度和湿度
3. SOC电器元件损坏
4. 声音(大吼一声硬盘就会坏?)
5. 灰尘

这些因素有些能够被采集到,比如温度和湿度、一些元器件数据,但是更多的数据无法被采集和量化,现在硬盘数据安全技术通常使用S.M.A.R.T.。S.M.A.R.T样例

通过硬盘S.M.A.R.T.各个维度的历史数据以及故障信息,结合机器学习算法,我们可以很轻松地学习出不同品牌不同型号的硬盘故障模型。利用这个模型,就可以预测出未来2天内硬盘出故障的概率,未来1周内硬盘出故障的概率,结合业务对硬盘稳定性的需求,运维同学就可以做相应的决策,提前统一做好数据备份和硬盘更换,防止数据丢失。

什么是机器学习

最直接的理解:
利用已有的输入数据和输出结果,总结归纳一个规律f(X),利用该规律结合目前已有的输入来预测未知的输出y=f(X)。

举个简单的例子,如何判断一个电影是爱情片还是动作片,我们只需要将已分好类的电影,分别统计接吻的次数和打斗的次数,然后对比需要预测的电影中接吻的次数和打斗的次数,就可以大概知道这部新的电影是什么类型

机器学习,按样本是否已经有输出结果,可以分为:
1. 有监督学习(Supervised Learning)
2. 无监督学习(Unsupervised Learning)
3. 半监督学习(Semi-supervised Learning):部分数据有输出结果,部分没有

按算法预测的用途,则可以分为:
1. 分类:预测结果为离散变量,比如“是”或者“否”;“男装”,“女装”或者“童装”等,常见的算法有:SVM, 朴素贝叶斯,最大熵, 决策树等
2. 回归:预测结果为连续值,比如:价格;销量;概率, 常见的回归算法有:线性回归,逻辑回归(Logistic Regression), SVR等
3. 聚类:将未知数据输出结果的输入集进行分类,常见的算法有:kmeans,谱聚类
4. 主题模型:对文字隐含主题进行建模,常见的算法有:LDA,PLSA

5. 降维:主要用于将样本数和维度都很高的数据,通过数学方法,保证不改变数据特性的情况下,抽取主要特征,降低数据维度;常见算法有:SVD, NMF, PCA

分布式机器学习平台

常用的海量数据机器学习解决方案有MPI, Spark, MapReduce。MapReduce被用来做常见的重IO型的ETL相关数据处理任务,MPI和Spark则主要用做算法模型训练。由于笔者接触得比较多的是基于MPI开发的相关算法,因此主要介绍下基于MPI的计算平台。

MPI翻译成中文叫消息传递接口,不太好理解。简单的说,就是MPI是一个消息通信标准,只要遵循这个标准,开发者可以很方便的完成网络间的数据通信和计算。利用MPI这一个编程接口,我们可以开发各种机器学习算法,使机器学习算法不再因为大数据而无法使用。结合资源管理和调度器,就可以轻易地实现机器学习算法相关Job的计算和学习。下图是MPI调度服务的整体架构图

程序之家二维码

000
评论