什么是混沌工程?探索 实验
是通过开展实验来探测复杂微服务系统在发生故障时系统的防御能力以及工程人员的应急能力,开展各种实验,包括注入一些系统类的故障,或者是软件类的故障,或者是网络类的故障等来看防御能力及检测能力,还有修复能力。混沌工程要追求到2018年,是Netflix公司的核心数据库发生故障,导致停服三天,大量的用户受到影响。Netflix工程师将服务迁移到微服务架构,微服务架构消除了单点故障,但是也引来了更复杂服务管理的问题。为了提升服务的可靠性、可用性及容错性、伸缩性,Netflix公司开展了混沌工程。2010年的时候,Netflix公司创建了,也就是第一款混沌工程工具,2014年提出了故障注入测试,2015年的时候。Netflix公司和社区提出了混沌工程的指导思想。2017年,Netflix发布了混沌工程实验平台。
近期为什么混沌工程在国内越来越火了呢?国内随着移动互联网服务技术的日益成熟,特别是移动互联网时代用户和流量的激增,促使了分布式、非服务、云衍生、人工智能等技术的飞速发展,特别是在中大型企业、TOC的企业。分布式云原生成为主流的系统设计部署方案。为了保证用户体验,混沌工程作为提升系统可用性的有效手段被广泛应用起来。目前促使混沌工程开展的前提条件呢,就是服务达到一定的复杂程度。国内在几个大厂开展的比较早,特别是阿里2012年的时候就开展了混沌工程相关的探索的探索服务的强弱依赖关系,那这要得益于阿里复杂业务的增长和拓展,特别是双11的大促活动,而是得益于阿里云生态的服务需求2016年的时候,阿里云正式的开展了故障演练,2019年的时候,阿里云发布了 开源混沌工程,2020年的时候,混沌工程作为阿里云服务的商业化服务,为阿里云相关的用户如果提供商业化的混沌工程服务,从招聘的岗位上来看一下国内对混沌工程师的需求。在当前市场比较萧条的情况下,需求方呢,主要是以金融大的互联网公司为主,相比同级别的其他的测试职位,专业技能上要求比较高,包括云员生基础,中间件监控开发技能,总之无论从企业系统应用空间做前景上。都会越来越多,预计2023年将会有40%多的企业规模化的应用混沌工程。对于混沌工程和其他测试的区别呢,本质上是思维方式的不同,在实施方法上会有一定程度的重合,但是混沌工程要对系统设计要有更高的了解,理想情况是。需要在线上系统进行,因此也具有更高的风险性。混沌工程呢,更加强调的是一种探测性的工程,故障注入、故障演练。
包括红蓝对抗,可以说是混沌工程的应用细分,我们希望通过混沌工程的开展,能够衡量我们微服务的容错能力,包括面对要用延时服务不可用资源满载的情况下,服务的容错能力,另外能够验证。服务的现状性,同时验证我们的搭配方案是否可用,从而提升我们的监控的时效性,提高定位解决问题的应急响应能力。通过对混沌工程的收益调研结果看,提升服务的可用性是混沌工程目前的最大收益,同时也在很大程度上。降低了服务的发现时间及解决的平均时间,倡导无论是多大规模的软件系统和任何的研发阶段都可以开展混沌工程,目前国内的开展主要是在。研发测试环境或者是预生产环境,只有少部分企业实现了再生产环境,开展混沌工程,输入的故障类型包括。
计算资源,网络资源,存储容器和一些软件类的故障,对于熟知混沌工程的同学,这三个概念肯定是耳熟能详的。首先是混沌猴子来源于来。faced choose monkey,在混沌工程实验过程中,就好像发出了若干的混沌猴子,在系统中上蹿下跳,制造出混乱的状态。那混沌猴子呢,就是指混沌工程场景实施的工具及指令啊,爆炸半径是指混沌工程的影响范围。可以是一个QPS,一个用户或者是一批用户。爆炸半径的可控性直接影响到混沌工程的安全性,决定混沌工程的成败。稳定状态代表对系统表现的一种期望,这个期望呢,主要还是从客户的诉求、服务设计能够达到的SLA状态。对稳态的描述,基于系统的一些业务指标和技术指标,稳定状态的定义,决定和判断关键工程下系统的响应。
是否能够达到预期的标准,刚才我们说混沌工程可以在任何的系统、任何的开发阶段进行开展混沌工程,但是为了有效的开展混沌工程,还是需要一些前提条件,首先是系统具有基础的保障能力。比如像刘将能够予以一定的风险,否则放出混沌侯之后很容易把系统加造成比较大的故障,系统隔离的能力能够辅助我们很好的控制爆炸半径。比如说微服务容器化的开展,给混沌工程开展提供了良好的环境支持。设想如果是系统是完全是单点的,或者是耦合度非常高,那注入一个故障的时候,所有的服务都受到了影响,它具有高可用建设的能力,为了保证会内工程安全的开展以及判定系统的稳定状态。那我们需要依据系统的一些监控指标,包括是业务类的监控指标,来建立我们的稳定状态,如果没有或者是缺失相应的监。
控能力进行混沌工程是比较危险的,在混沌工程开展的时候,我们要放出混沌猴来制造混沌状态,混沌模型构造的能力能辅助我们快速的构造某类的故障。目前呢,业内已经有比较多的开源的混沌工程的框架及工具。并且有一些商用性的混沌工程工具。目前混沌工程没有被普遍开展的原因之一就是缺乏经验,担心发生不可控的风险。目前呢,也已经有很多的商业类的企业,能够提供混沌工程的咨询,混沌工程的实施流程呢,其实和性能测试的实施流程是非常相似的,看起来简单,但是在真正的实施过程中,是需要非常多的经验和。人员的沟通,无论是在开展性能测试或者是混沌工程,如果我们只是依赖于线上或者是线下偶尔的进行一下压测或者是混沌工程的话,那我们就很难持续的保证系统的一个稳定性。
我们希望能够将混沌工程的实施常态化,能够定期的、周期性的在线上或者是线下进行开展,甚至实现混沌工程的自动化,并且纳入流水线定期执行。在混沌工程开展过程中,我们要坚持。几个原则来保证我们工程,工程开展的一个有效性及安全性,首先是建立一个稳态的假说,那稳态的假说能够描述你在什么样的情况下放出什么样的混沌猴子,达到什么样的一个稳态,我们刚才介绍过混沌注入的故障类型是非常多样的,那其实在真正开展过程中,我们不可能对所有的故障都会进行注入,对哪些进行验证,或者是选择哪种类型的故障,嗯,进行组合呢,我们其实还是要根据实际系统线上的一个表现,通常我们首先对预估频次就比较高的场景进行实验,关于混沌工程是否必须在生产环境中进行实验?其实理想情况下,混沌工程肯定是希望能够在真实的客户环境中进行实验,但是在起初阶段,混沌工程的成熟度并没有那么高,安全防护策略并没有达到很高,所以可以采取先进行线下实验,然后逐步迁移到线上进行实验,我们希望能够做到混沌工程的持续的开展,那提升我们的开展效率,就是要把它进行一个自动化。能够实现我们的自动的故障注入,实现自动的稳态判定,甚至实现我们混沌工程的无人值守,最小化爆炸半径,这个其实就是一切开展的一个安全性的前提。
就是能不断的去提高我们的经验,同时也提高我们的识别和降低风险的一个能力,然后很好的去控制这个爆炸半径,现在很多企业对于混沌工程都有所开展,那混沌工程也。积累了很多的经验和成熟的工具,还有框架目前业内比较成熟的不下十几种,对国内来说应用比较多的还是阿里的,还有一些商业性的,其实现在它的系统化能力是比较成熟了,可以在web上。能够完成通用基本能力的注入,我们现在对于质量,无论开展各种专项呢,其实都是随着我们的逐步深入,都要走向不同的一个成熟度,那对。混沌工程的成熟度呢,主要是体现在两个方面,一个是熟练度,还有接纳度,熟练度呢,主要是来考察我们过程中实验环境,实验工具啊,计划输入的故障类型,然后自动化的能力,环境的清理恢复的能力等等,这些过程中的一些条件和达到的水平。接纳度呢,是混沌工程实验。覆盖的广度和深度、接纳度越高,暴露的脆弱点也就越多,但是信通院对接纳度分为这个应用成效和应用深度,我们可以通过成熟度指导我们在开展混沌工程中的执行计划,今天我们混沌工程就聊到这里。