运维和AI可以碰撞出怎样的火花

网友投稿 811 2022-10-31

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

运维和AI可以碰撞出怎样的火花

1 AI对运维的价值

很多同学都希望了解怎样在自己的工作中将大数据技术和运维结合在一起,其实大数据是数据积累的一种形式,当你收集了运行数据后,要合理的存取,要做好数据整形,当然最重要的是你要有个合适的模型来分析数据。那么怎么分析数据怎么建模呢,我们就继续聊一聊怎样使用机器学习的算法来做这些事情。

首先我来说一下我对运维的看法,运维工作涵盖面很广,涉及部署、变更、配管、上线、采购、故障管理等等各个方面,正是这些重复性的劳动促使我们从手工运维演化为工具运维,又从工具运维进化到自动化运维,并且提高到了理论层次,让我们看到DEVOPS和SRE的存在。这些本质来说都是让你更加合理的管理和分配,让你能更好的掌控生产环境。

我这里提到的好有两层含义,分别指的是便利性和稳定性,shell脚本、运维工具的产生把我们从手工运维中解放出来,更重要的是工具的稳定性特点,像是zabbix不会因为晚上犯困而漏掉一次检测,像是自动化上线系统,不会因为你敲错一个字母导致负载均衡器切换失败...

现在越来越多的运维工具和框架让我们站在巨人的肩膀上,但是仍然有一类问题我们没有涉及到:zabbix的阈值还要人为设定、内核参数的timewait_reuse要不要开、mysql的buffer pool 要开多大等等。我们发现这些参数都要靠经验设定、一些开关参数在重要系统上也会让你犹豫要不要打开。可能某一个不起眼的参数,就让你在流量高峰发生雪崩,这一切的一切都要依赖你的工作经验加上犯错误的经验,来去慢慢调整参数。这些问题说的高大上一点就是决策问题,说的更直白一点呢就是分类和优化问题。

比如我们设定zabbix检测一个进程异常的一条规则, 每5分钟检测一次,我们得到健康检查接口的一些参数,包括各个接口的返回时间、请求失败次数、失败用户数量等,累计3次检测超过一个固定值就触发报警,你们认为是否合适呢?

我们必须要根据以往的故障情况来计算这个参数,那我们如果让计算机能够根据以前产生的数据来算出这个参数,是否会更好呢?或者我们建立一条规则让计算机根据我们输入的关键数据,可以不断的优化检测时间间隔是不是会比手工设定这个参数更适合呢?

那么机器学习算法就是选出这组参数的工具,你依然可以像使用python构建运维工具一样使用这些算法,只需要更多的运用点数学的知识。

2 机器学习算法的种类

这里我想先和大家说下机器学习,机器学习是一类特定的编程方法,它要解决的是谁和谁长的像(聚类),谁和谁不一样(分类),符合规律的可能有谁(预测)和主要参数的挑选(降维,主成分分析),根据他们是否需要经过训练才能使用,我们又把他们分成监督学习和非监督学习。

我们上面要让计算机学习是否该报警,属于分类问题,属于监督学习的一种算法,监督学习就像教小孩子一样,先给计算机一些数据和已经分好的类别,让计算机根据这些数据和结果用给定的算法建立一个模型出来。我们利用模型再去对新的数据进行分类。这就是机器学习的分类算法工作的过程了。看,很简单吧。

3 来个Hello World

为了让大家更好理解分类算法,我这里引用一个古老的有代表性的算法叫做感知机算法。可以说它的提出是机器学习算法的鼻祖,在1957年就已经提出来了,程序员也可以把它理解为人工智能的“Hello World”。虽然感知机实现简单,但是它的原理却值得好好研究。因为研究透了感知机模型,学习支持向量机算法的话会降低不少难度。而且感知机也是神经网络,深度学习的基础。

感知机能够做二分类,也只能做二分类,即根据给定的数据,判断是或者不是某个事物;或者判断是A还是B,仅能将结果分成两类。

我们根据zabbix每次采集的相关数据和是否报警来作为训练数据

采集次数

是否为集群

服务器配置

接口调用出错次数

接口返回时间

是否报警

1

L2

1

 40,000

-1

2

L1

6

 80,000

-1

3

L1

5

 70,000

-1

4

L2

6

 200,000

1

5

L4

10

 50,000

-1

6

L3

2

 100,000

1

注:数据为随机生成,无任何实际意义

这些是信息中,报警的数据为1,没报警为-1,并且结果仅有这两个值。当我们每次获得新的监控数据时,都会涉及这些数据。如果收集的数据较多,也会涉及更复杂的公式计算。这里仅仅为了演示感知机,所以收集的信息较少,关于数据收集和整理的知识我们会在后续相应专栏中和大家详细探讨。我们将新客户提交的资料代入我们预先设计好的模型,经过数学计算,就可以快速得到结果;那这个模型怎么生成呢?就是用感知机算法加上老的数据生成的。

首先我们选择接口访问失败次数和响应时长两个属性作为判断是否报警的关键因素,这两个属性我们称它们为特征。选择两项的原因是我们更容易理解,我们可以画一个直角坐标系把接口访问失败次数在x轴,响应时长放在y轴 ;这样每个用户就是的特征值就是一个点,如图

没有报警我们用红色点表示,报警的我们用蓝色表示,我们发现划分他们其实非常简单,只要画一条直线就能分开两边的用户。而这条直线就是我们想得到的模型,怎样得到模型呢?使用感知机算法就可以得到。但是细心的你会发现这里有些小小的问题:

1、如果右下方三个点有任意一个为蓝色,则没有一条直线能分开两组客户;

2、如果特征值是三项,或者更多项我们怎么划分呢?

3、我们可以画的直线不止一条,虽然都能进行用户的区分,但是如果直线离红色的点越近,红色部分的用户约容易被分到蓝色用户区域,也被称作模型泛化能力差。

基于上面的三个问题感知机有这它自己的办法:

首先,针对第一个问题,感知机是无法解决的,所以它在建模之前先要确定一件事件,被分类的点必须在直线两侧,用数学表示这条直线就是ax+by+c=0 ,那事先给定的两组用户特征(专业名词叫做样本)必须满足其中一组ax+by+c>0 ;另一组ax+by+c<0  ; 这里我们得到的 a、b、c 就是模型,能够得到 a、b、c的方法我们就称作算法。

如果特征值是三项的样本,我们也要满足上面的要求,但是三项特征值就是三维空间,来去计算距离,这里不展开,大家只要清楚仍然要满足第一条要求即可,那我们划分两组样本空间的就不再是一条直线,而是一个平面,三维以上的样本空间同样要遵循这个原则,那划分开的就被称作是超平面,我们无法展示出来,但是可以用数学的方式计算出来。

第三个问题怎样在二维空间上画一条更合理的直线,感知机算法无法解决,我们会在后续的分类算法(如:逻辑回归、神经网络、SVM等算法)中讨论,让分类更合理。

这里,我再将数学公式的表示方法也写出来,帮助有数学基础的你了解它的精确定义:

如果我们有m个样本,每个样本对应于n维特征和一个二元类别输出,如下:

它们对应的样本是:

(‘客户A’,‘男’,‘本科’,1,40000,-1),(‘客户B’,‘女’,‘高中’,6,80000,-1),…

我们的目标是找到一个超平面

其中一类样本满足

另一类样本满足

我们就定义一个sign()函数,使得

而感知机算法可以定义为

我们用感知机算法来尝试手工计算一下模型,我们看到样本数据的属性都要进行预处理;字符类型的要数字化,数字类型的有100以内,有的参数为1万以上,如此悬殊的数据会让计算过程变得非常漫长。因此我们先对它们做预处理,为了方便大家理解和画图,我们只选择两项作为特征值,得到如下结果:

调用次数

接口调用出错次数

接口返回时间

是否报警

x1

-1.24

 -0.86

-1

x2

0.31

 -0.17

-1

x3

0.00

 -0.35

-1

x4

0.31

 1.90

1

x5

1.55

 -0.69

-1

x6

-0.93

 0.17

1

画图表示为这样

接下来我们就像是求二元一次方程组一样,将工作年限和年收入代入ax+by+c=0的公式中。第一次首先令c=0,如果“运气”好,我们会得到一条直线,刚好能够分开两类样本;那如果运气不好,刚好有一个样本被分类错了呢?我们会调整这条直线的倾斜程度,并且把所有的客户依次代入这个模型里面,当第一次找到满足的a、b、c时,分类结束,这时a、b、c就被称作模型,而这种计算的方法就称作感知机算法。

在整个计算过程中,我们迭代了三次找出了用于分类的直线,出现三次误分类的情况分别是:

迭代次数

误分类点

θ1

θ2

θ0

0

x1

1.240347346

1.240347346

-1

1

x5

-0.310086836

1.930412905

-2

2

x6

-1.240347346

2.102929295

-1

最后将分类正确的点使用sigmod激活函数分为1和-1两大类。

相信大家对感知机算法已经有了一个充分的了解,感知机算法不需要大家过于深入的研究,因为算法本身有很大的局限性。

比如:如果样本量过于庞大,会导致迭代次数过长;样本必须满足能被超平面分割,否则无法进行训练;计算出超平面的模型后算法就终止了,泛华能力差, 在实际业务中分类效果并不理想;但是这些并不能影响它成为我们经典的分类算法。

上一篇:HTML5应用加速的9个方法
下一篇:HTML5的优化技巧
相关文章

 发表评论

暂时没有评论,来抢沙发吧~