当前位置:首页 > 物联网

阿里千亿交易背后,运维如何做到“0”故障发布?

作者:it技术知识网 阅读次数: 时间:2019-06-29 08:30:10

摘要:“阿里巴巴一家一百个十亿的交易背后,如何避免失败发布?如何应对这种解决方案的实际运行和维护过程中遇到的问题?近日,阿里巴巴村少操作和技术专家的维护,给我们带来了解决方案和思路。近年来,我们已经做了分销效率和稳定性,这是简单而有效的大量的工作,说释放耗时。一个是释放速率,这样的应用是完成一小时五十分钟才能完成发行?另一个

阿里巴巴一家一百个十亿的交易背后,如何避免失败发布?如何应对这种解决方案的实际运行和维护过程中遇到的问题?近日,阿里巴巴村少操作和技术专家的维护,给我们带来了解决方案和思路。

近年来,我们已经做了分销效率和稳定性,这是简单而有效的大量的工作,说释放耗时。

\

一个是释放速率,这样的应用是完成一小时五十分钟才能完成发行?

另一种是在出版过程中的开发人员参与需要介入处理在出版过程中出现的问题?两者都准备地说,提高配送效率。

最基本的是提供稳定的稳定性,安全性的系统系统,最重要的是,通过该系统,以保证稳定公布的申请将不会被释放,而服务不可用,因此导致失败。

我们比较了这本集团产品广受好评的效率SP2P文件分发系统,叫做蜻蜓。

据阿里,其自身的一些特点,我们实现了安全,高效的P2P发布,同时对P2P协议引进超级节点是S,提高开机速度P2P网络,现已开源。

我们这样做是在去年,产品的所谓无人值守出版的稳定,出版物进行测试,以查看是否释放原因的问题,大家一起提高在该领域的今天出版和交换意见的可靠性。

网上公布的痛苦

我们为什么要投入大量的精力在稳定性方面,它?看一个笑话。

更改故障

这个笑话可能没那么有趣,但它是如此真实说明了一个问题:在理想与现实之间的区别,你觉得有四个一只狗陪你,但实际上它是另外两对夫妇。

这和我们做出版生产环境是一样的,我们相信,随着我们优秀的逻辑思维能力,已经把所有的场景都认为,测试也做得非常好,但是,该行发行后,经常会遇到的实际结果和预期不一致,发生故障。

阿里,我们对未能产生统计的原因,很大一部分是由线变化引起的呢,我相信在座的各位都会遇到过或制造故障,学生的过失的开发和运行维护都非常敬畏。

我们已经遇到了故障,但影响将是失败的比较大的差异。有些故障可能处理后发现一些故障恢复的故障可能会导致严重的后果。因此,我们需要尽量避免失败带来的变化。

业务挑战:阿里的具体业务方案

回到阿里,大家都知道,去年的营业额已经达到了双11 168 200 000 000,试想一下,这么大的交易量下,如果发生故障,会发生?

阿里现在多元化经营发展,新的零售,线下支付等新业务的情况,要求我们必须更加敏感的故障,以能够更好地避免失败,很快就找到了故障。

此外,如果该行是一个场景,比如支付宝,如果服务出现不可用几分钟的地铁,那么会发生什么?

那么如何才能有效避免失败?

那么,怎样才能发生释放时有效地避免失败?

通过“蒙”?我们知道这不是。但是想起来很多时候确实或多或少在“蒙”。我个人有过类似的感受。

虽然我们将不只是不放在网上发布测试,但尽管经过几轮的测试中,它已经过去了,不然肯定没办法涵盖了各种复杂多样的网络场景。

而且也没有办法覆盖这些情况下,你只能靠运气“蒙”了,运气好的话,这些场景是没有问题的; 运气不好,这只是一个场景,一个问题,一个失败。

一般来说,为了不“蒙”尽可能,我们会添加各种上线工艺验证环节,尽可能保证可靠的释放。

例如在发布之前,我们将核实的功能是确定通过各种测试,包括单元测试,集成测试等。

在发布过程中,我们将通过一些释放的策略,例如,第一前进(预发行是一种特殊的网络环境,并使用相同的网络资源,如数据库,但用户不会有业务进来)然后灰度,然后滚动释放分批以便逐渐地改变将被更新到线。

发布完成后,将利用预警系统,如阿里GOC的一些失败的有早期发现故障,处理这些措施,这些方面都已经成熟的系统来支持,但是发布的时候,我们很多时候还是心中无底部。

“人工智能”的解决方案

还有什么可以帮助我们尽可能地保证其发布的质量?它可能已经这样做:就是“人工”智能放保护。

在发布过程,看着各种屏幕,看各种数据,法官来到这个版本的肉没有问题。

阿里,画面包括显示器,发布单个机器,GOC故障预警:

监测可以体现在一些系统中,目前的状态,例如机器的负荷了,成功率下降接口。

单曲发行,让我们了解当前版本中,机器的数量已经更新到新版本,有多少还在使用旧版本的,机器启动后,有多少遭遇不寻常的等等。

在机器凝望,你可以看到一些日志信息,是否有一些新出现异常,所以不寻常的量大。

GOC,使我们可以结合第一次故障判断自己发布的内容是否该释放是由需求造成的治疗。

这样更让人放心相比之前,因为现在我们看到的情况最真实的网络环境,而不是仅仅测试数据。

但在屏幕这个人肉盯的方式也有很大的问题,第一成本太高,发布过程需要多种技术工人盯着屏幕看的,一会儿离开。

二是人为因素太多,相同的出版物,不同的人的结果进行分析的可能完全不同,即使是同一个人,因为国家或其他原因,和一些相同的数据,有可能分析结果是不一样的。

此外,人们也有局限性,各种数据刷新快,方式肉眼分析根本没有时间去看看。

由于这种屏幕盯方式被证明是有效的,但也存在一些问题,那么,我们也可以考虑通过系统来解决这些问题,因此,就有了“无人值守颁发”。

无人值守发布

无人值守的释放主要是上述过程的自动化,智能化。通过自动实时在线收集这些核心数据,智能分析,形势迅速释放,以判断是否发生了故障,任何立即终止当前版本。

无人值守发布了两个核心功能,当检测到故障,建议不正常。故障检测的主要问题现在被发现。

推荐的异常主要的预防措施,是指发行出现了问题,但并不一定会导致失败。

这些异常的学生制定明确,有必要制定关注,更常见的是从数量的绝对数量异常的角度还是收益的出现没有明显的,但可能需要加以解决。

什么是无人值守的释放

首先是无人值守的发布信息显示单页的详细信息,单一版本的详细信息页面是最常见的过程中会看到页面发布。

因此,我们选择了无人值守检测到某些信息在页面中显示此页面可以做的事情做出来。

当然,并不是说学生必须发展自己刷这个页面就能知道是否有异常,在异常释放的情况下,当前版本中,系统会首先自动暂停当前版本。

然后用钉子和一些其他的通知方法,告知学生的发展,您的出版物之一出现了异常,你需要去到下一个。

提供的信息包括左侧不寻常的摘要信息,通过汇总信息的当前版本中,你就可以知道当前版本是没有问题的。

如果您有任何疑问,你可以看看右边分类的问题,是用于监测问题的指标,或业务问题的指标,或故障日志的基础上,日志是记录问题的具体问题,在这里你可以看到。

如果没有足够的信息,以确定是否有错,然后单击查看详细信息,你可以看到更详细的信息,具体的例外,来进行判断。

当需要访问无人值守配电系统无人值守发布的应用程序,当然,在大多数情况下,这是一个自动的过程中,系统会判断是否标准接入的应用。

如果是的话,它会自动访问,但也有一些情况下,不会自动导致应用程序的访问,在这种情况下,应用程序会通知用户是否当前访问,如果没有连接,需要做一些配置或转换访问。

无人值守发布细节

这是无人值守的广告节目的详细信息页面,在上面,你可以看到一些更详细的信息,如前后对比,在各项指标在线监测变化等不寻常的数量的出版趋势。

通过这个页面,由学生开发的主要有足够的信息,以确定这种拦截的有效性,需要回退等操作。

无人值守访问

这是应用程序访问一个页面无人值守版本中,您需要配置的主要经营指标监控,日志路径等。

无人值守的真实案例

这是一个典型的案例,一些数据确实隐藏或处理。出版过程中记录一个例外是一个显著上升,我们可以从号码的左侧看到一个异常。

点击异常信息也可能会看到更具体的异常堆栈信息,你可以看到异常数量显著上升右边,可以看到这个测试下面是确定用户是否确实是一个问题,最终的实施一个封闭的释放操作的回滚。

客户的反馈意见

这些都是一些用户的反馈。应用程序访问无人值守的释放,发给提高稳定性起到了立竿见影的效果。

指数

以上这些情况代表了用户的体验和反馈,部分再怎么样的整体效果,或者让数据说话。

有业内人士对这一异常检测的两个主要指标:一个是召回率,速度是准确的。

回想一下,主要用来反映漏报,误报的准确率主要用来反馈。假阴性和假阳性的概念更好地理解。

遗漏那会是10次故障,系统报出9,那么90%的召回率,这是只有10假故障,遗漏报道了20出的10对报告的错误额外的,那么准确率50%。

目前准确性,我们已经做了约60%,这意味着几乎所有的报纸两次,一次是的确有问题,这方面的经验应该算是相当不错的。

查全率,我们已经实现了90%,90%指的是故障,我们没有报告它的出现,我们有效地拦截九次,九次这可能会导致故障,也可能只是一个问题,但不会导致失败,但由于及时发现,并没有导致失败。

这是很难说清楚有多少9最终会导致失败,所以当没有召回率的失败是分开计算,但计算召回计算的故障和异常就在一起。

关于哪些指标来集中他们的努力,我们也经历了一些波折。从一开始的目标是拦截尽可能多的失败,所以更注重召回,造成时间,精度低的长期周期,酒吧酒吧是很多,但有相当数量的假阳性,其中报告10可只有一个有效。

如果我们的用户,我们可能会一些假阳性后,失去了这个产品的信心,这导致我们不敢大面积。

后来调整策略,以准确的问题优先,反正直到这些失败也存在于我们的系统,该系统中,我们可以减少一些好。

因此,为了不追求召回,弥补,可以大面积推广的准确性后,效益大,为了避免麻烦也更自然。当然,背部或继续抓召回率。

发布时间实现无人值守

前面说了很多,但没有提及具体制度的执行,接下来我们来看看是如何实现无人值守发布?

首先,看一下我们的产品和业务流程分层。

产品架构和业务流程

我们的系统大致分为三个层次:

顶层是层分布系统,我们的产品被称为海狼,多为单发发布的提交,执行和信息反馈无人值守显示,这一层是可扩展的,除了分配系统,您还可以停靠一些其他变化的系统。

一个中间核心系统是无人值守,根据收集到的分析任务,相应的数据收集,分析检测到的。

底层是后来的层离线分析,主要用于一些训练算法,回放验证,然后具体说明。

一般业务过程中,用户提交一项计划,以释放分配制度,这一次将诺曼底(诺曼底)平台发布(海狼是诺曼底平台的一部分,负责执行的释放)。

海狼后开始发布一个单一的,无人系统将收到一个单个释放事件执行,然后开始分析,当将使用一些算出来的衬托的特征,然后将所检测的电流的指标。

如果有一个例外,它会暂停唯一由海狼接口发布的操作,用户可以发布一个页面来查看相应的信息,然后进行提交反馈后,一些判断是一种有效的拦截,或误报,等。

两个阶段

以上是一个粗略的过程中,具体的实施方面,我们经过反复的两个主要版本了,这两个版本都介绍下以下。

1.0实现

通过前面的描述,它应该是一个大致的了解,无人值守的发行出版过程是分析数据的各种指标来判断是否有异常释放,那么有哪些指标可以用来分析的数据就?

以下类别大致归纳为:

业务指标,当前版本的最直接的反映是没有问题的,如果影响到生意,所以基本上是一个问题。

如果业务指标可以覆盖所有的故障情况,因此从理论上讲,只要上线业务指标的分析,但现实往往是很多需要提高的业务指标跟不上业务发展,经营起来,不上指数,这是非常真实的东西。

基本指标,如机器的内存使用情况,CPU使用率,负载,磁盘IO,这些指标一般都不太可能发生在出版过程中显著的变化,但一旦显著变化,你可能有问题。

中间件指标,HSF内部阿里被广泛使用,TAIR,metaq,其中有相应的指标QPS,RT,成功率,如果发布成功率突然倒下更明显或QPS 0等。,那么最有可能是一个问题。

日志,阿里比较多的Java应用程序,我们会放一些异常日志栈信息打印出来,这些异常并不反映运行的代码的正常过程,它是一个非常有价值的指标数据。

通过分析这些异常情况发生,或情况,或是否有容易出现故障的一些常见的异常,例如ClassNotFound的等。我们可以足够有用的判断。

索引和算法选择

这么多的指标,我们应该开始从哪里开始使用它?

第一个版本,我们选择了这两个方面的基本监测和记录。原因比较简单,基本的监测范围是足够高,有足够的数据使我们能够分析,并根据经验日志是非常重要的。

随着业务和中间件监测指标,并由于一些问题,其他数据方面,第一个版本我们没有去想。

\

随后的指标的基础上如何监控和日志分析它?我们采用的是使用一些简单的规则和的算法常见的方式复杂。

对于一些情况下,如前面所提到的危险的异常,使用常规方式,直接拦截的出现; 对于增加的异常变化,该算法用于判断是否这种增加的合理的范围内。

如何实现?指标和分析,以确定一个好主意,我们来看看需要做些什么。

第一步是收集数据,我们面临的问题是需要收集哪些数据,如何收集这些数据,尽快。

其次是数据处理,数据的原始数据会有一些干扰,干扰源可能有很多,可能是数据采集系统本身的问题,也可能与自身特点的业务,我们需要对这些干扰数据可以淘汰。

针对这些数据,然后收集和处理,制定什么规则,什么样的算法来分析它们,确定有问题的出版物后是否在数据尽可能准确。

如何收集数据?在收购之前,总体思路的第一个明确的检测:出版后出版,发表和未发表的比较机器前指标比较和。

所以,我们要收集数据的时间序列,这是每个时间点的指标是什么样的数据,比如负载在某个时间点上,该系统是多少在某个时间点上,已经出现了某些异常多少下。

有什么具体的指标进行收集,上面已经明确,只要这些指标做了一个分析,最重要的故障情况最能反映所选择的指标,收集过线。

从机器中获取索引其所?正如前面提到的,我们研究的想法,有一个发表和未发表的比较机。

所以我们成立了两台机器为每个应用程序,一组被释放,是参照组中,只有两组机数据采集的,而不是所有的机器都收集数据。

由于采集时间,不只是之前和收购将被释放后收集的所有数据,过一段时间。

数据被收集之后,下一个步骤需要对数据的一些处理,除了一些干扰数据不包括前面提到的,我们还需要某些维度的聚合。

由于单机得到一些数据,因此需要对公布未公布和其他聚合兼并一些尺寸数据,最终生成可分析数据。

数据分析

数据分析的方法中,我们使用了漏斗改进的检测模型,它具有以下优点:

满足不同的指数,不同算法的需求,不同的指标都有自己的特点,使用相同的算法显然是不恰当。

它的速度和足够快的同时检测需要更少的计算资源,还支持一起分析许多指标。

通过以上工作,我们大致可以把运行建立了一个检测系统,这第一个版本是不是在精度方面非常出色的表现,时间能流掉30%,40%。

但只有10%的准确率的实际运行时间向上和向下的线,所以我们需要提高精度,如何提升它?

答案是误报和漏报数据的连续分析,然后做一些微调算法。不断微调算法带来了新的问题。

这些误报数据,新的算法可能不被报出,但在此之前的数据没有举报,有一个新的算法,他们报出?在此之前,有效地阻止了报纸,新算法将不会报告出?

因此,我们建立了一个脱机播放系统架构提及的产品之前,使用前验证播放算法,误报,有效阻隔,无法拦截的数据中提取部分数据。

每次调整算法后,通过数据分析再播放系统,我们来看看准确率和查如何变化,无论是误报还是误报,有效地阻止了遗漏是否等。

无人管理播放系统

无人值守整个重放系统基本上如下:

记录模块将通过记录数据的释放单线到重放分贝来检测。

再生需要时间,通过回放触发,触发无人值守的测试,测试时间将呼叫显示器模拟接口提供了回放系统,对数据的访问从回放分贝,而不是从实际的数据源获取数据。

重播检测结果来保存,导致报告重放输出。

该算法的困境

通过无人值守的播放系统,我们建立了一个可靠的算法认证机制,通过不断微调算法,提高了召回率和准确。不过,还是遇到了一些问题。

首先是需要继续分析试验数据,然后调整算法,这个过程是很辛苦的,而不一定是相应的回报。

\

还有很重要的一点是,在实践中,我们发现,在重复的误报一些明显的虚假信息。

因此,我们需要探索能够解决这些问题的方案。所以第二个版本中,我们采用了基于机器学习的方法做在原有的基础上有所改善。

机器学习的大概过程

首先将有一个学习的过程,通过一些所述单个指标数据和截距数据,以及一些的数据用户的反馈,从应用程序发布的时间计算出的释放的历史的提供图书馆。

当释放时,我们会先用一些算法来检测可疑的指标和可疑指标和比较特征库。

如果您发现可疑指数下跌正常特征库,则忽略,否则,它被认为是不正常的释放似乎拦截。

拦截完成后,如拦截该数据根据公布的单个用户行为和反馈的最终结果被保存是有效的,数据输入作为下一离线计算。

三个要素

机器学习也面临着一些问题需要解决,首先是学习什么样的数据,是应遵循通过什么方法来学习什么样的结果输出,另一个是如何使用这个研究结果去的背后发布检测。

样品

我们先来看一个样本的问题,它是学习资料。我们有这些大致的一些数据:单公布的数据显示,在截获的数据的有效性,一些数据用户反馈的过程中释放的指标数据。

这些数据看起来很多,发布的每一天就有几万,每一个版本大量有指标的数据,但实际上,每个应用程序的特性是不一样的。

所以,当学习必须基于尺寸的应用学习,并在少数,这些数据如何的多少来计算发布了应用程序的特性每个应用程序发布数据?

有两种思路计算:

认为是异常的,这是一个比较自然的想法,找到不同寻常的特点,下一场比赛,如果异常,那么就可以判断有问题的出版物。

应用方面的考虑正常和异常的释放往往远小于正常释放,甚至可能从未有过的异常释放。

因此,为了计算基于所述尺寸,没有太大的可靠的,相对可靠点的异常,只能应用于计算通过发布一个单一的普通数据的特性公布的正常释放。

一个挑战是如何采样,以确定真正的释放有一个问题,我们采取单一的出版行为和用户反馈组合,如果单释放被回滚,那么这是不寻常的,如果用户反馈说出现异常,它也被认为不正常。

关键不靠谱是用来描述两个用户反馈数据的特点,关键是用户反馈的数据很重要,是最能帮助我们理解的各项指标是否该应用程序的帮助异常检测。

但是,用户反馈数据和主观,释放异常发生时,A可以培养学生的反馈是没有问题的,和B的学生更为谨慎可能会认为反馈确实是一个问题,如何平衡这两个特点它是棘手。

这仅仅是通过这个数据中提到的用户反馈数据,反馈,我们可以知道,虽然异常明确的指标,但对于这种应用,它可能是完全没有用,不需要作为检测的基础上,再下一次检测时你可以忽略指标。

反馈收集的数据看起来很容易,但据我所知,在很多公司,这个数据的收集是比较大的阻力。

学生的发展不想填写反馈这个信息,比较幸运的是,我们已经采取了一系列的方法来优化和降低反馈的干扰,制定尽可能,这回来强行打开,收集数据帮助我们确实非常大。

algorithm

与样本数据,接下来的步骤是计算出版按照样本数据中,我们使用一个简单的分类方法的应用程序的特性,初始想法被分为正常,异常,不分为三类。

正常的更好的理解,异常是指每次出现可能会导致失败,它没有被分类了一些新的或之前出现的一些指标没有变回考虑到上面所说的异常样本非常小的问题,把它三统一成类。

也就是说,只计算各指数发布的应用程序时的正常阈值,如果被释放,指数值超过这个阈值下一次,有可能是一个问题。

具体的学习过程相对简单,总结一句话就是:找到在正常释放单一指标作为正常应用门槛指标的最大值。

具体过程为:首先释放的过程,如果不正常的指标出现,然后将发行以是否有发布这一问题的最终外观(无论是否通过发出一个单一的行为和用户反馈等回滚。)。

如果是正常释放,然后正常阈值之前进行比较,如果低于这个阈值正常之前就忽略了,如果比以前的阈值时,则正常的阈值更新。

如果此版本是异常释放,它应该在理论上判断指数是否比正常阈值,如果小,则更新正常的门槛,但事实上,问题可能不一定被释放导致该指标。

而如果确实这个指标的原因,那么之前的指数也应该是异常值高于此版本更大,考虑到这两点,我们在这个阶段采取的是忽略方式单一的异常释放,只为正常释放单个阈值计算。

使用索引

如果在正常的门槛比较简单。释放过程中,若出现异常指标,你会发现对应的指数比较,如果比正常阈值,则忽略了正常的阈值; 如果它超过正常阈值,如可疑指标。

在几轮测试的窗口期,窗口期会做一些基于测试结果动态调整,如果多次被判断为处于窗口期可疑指标,并达到一定比例,那么最终将被确定为异常的指标,该出版物截距。

提高机器学习大致是这样的,整个过程中,通过这一改进,而我们解决一些之前遇到的问题,提高查全率和精确度,尤其是在准确性方面已显著改善。

在另一方面算法,也释放了大量的精力了,你可以更好地优化这个学习。

作者:陆家叶平(绰号少荃)

简介:技术专家的R&d司的阿里巴巴有效性。目前从事该站的运行和维护(内部称为阿里诺曼底)工作的基础,是该集团最大的应用交付系统(海狼)官方。

编辑:陶佳隆,孙淑娟

来源:云计算的高效微信公众号转载,在本文中,依露叶平老师?GOPS 2018深圳站网站内容从语音云集。

精彩文章推荐:

程序员探索知识:点,线,面,体

从0-1,操作和自动化滴滴DB架构实践的维护

本文链接:阿里千亿交易背后,运维如何做到“0”故障发布?

友情链接:

大悲咒经文 佛经 观音心经