当前位置:首页 > 家装 > 装修设计 > 文章正文

鲜为人知的混沌工程到底哪里好?

编辑:[db:作者] 时间:2024-08-25 01:08:42

阿里妹导读:混沌工程属于一门新兴的技能学科,行业认知和实践积累比较少,大多数IT团队对它的理解还没有上升到一个领域观点。
阿里电商域在2010年旁边开始考试测验故障注入测试的事情,希望办理微做事架构带来的强弱依赖问题。

鲜为人知的混沌工程到底哪里好?

通过本文,你将理解到:为什么须要混沌工程,阿里巴巴在该领域的实践和思考、未来的操持。

一、为什么须要混沌工程?

(翻译自Chaos Engineering电子书)

1.1 混沌工程与故障测试的差异

混沌工程是在分布式系统上进行实验的学科, 目的是建立对系统抵御生产环境中失落控条件的能力以及信心,最早由Netflix及干系团队提出。

故障演习训练是阿里巴巴在混沌工程领域的产品,目标是沉淀通用的故障模式,以可控本钱在线上重放,以持续性的演习训练和回归办法运营来暴露问题,不断推动系统、工具、流程、职员能力的不断提高。

混沌工程、故障注入和故障测试在关注点和工具中都有很大的重叠。

混沌工程和其他方法之间的紧张差异在于,混沌工程是一种天生新信息的实践,而故障注入是测试一种情形的一种特定方法。
当想要探索繁芜系统可能涌现的不良行为时,注入通信延迟和缺点等失落败是一种很好的方法。
但是我们也想探索诸如流量激增,激烈竞争,拜占庭式失落败,以及的操持外或不常见的组合。
如果一个面向消费者的网站溘然由于流量激增而导致更多收入,我们很难称之为缺点或失落败,但我们仍旧对探索系统的影响非常感兴趣。
同样,故障测试以某种预想的办法毁坏系统,但没有探索更多可能发生的奇怪场景,那么不可预测的事情就可能发生。

测试和实验之间可以有一个主要的差异。
在测试中,进行断言:给定特定条件,系统将发出特定输出。
测试常日是二进制态的,并确定属性是真还是假。
严格地说,这不会产生关于系统的新知识,它只是将效价分配给它的已知属性。
实验产生新知识,并常常提出新的探索路子。
我们认为混沌工程是一种实验形式,可以产生关于系统的新知识。
它不仅仅是一种测试已知属性的方法,可以通过集成测试更轻松地进行验证。

混沌实验的输入示例:

仿照全体区域或数据中央的故障。

部分删除各种实例上的Kafka主题。

重新创建生产中发生的问题。

针对特定百分比的交易做事之间注入一段预期的访问延迟。

基于函数的混乱(运行时注入):随机导致抛出非常的函数。

代码插入:向目标程序添加指令和许可在某些指令之提高行故障注入。

韶光旅行:逼迫系统时钟彼此不同步。

在仿照I/O缺点的驱动程序代码中实行例程。

在 Elasticsearch 集群上最大化CPU核心。

混沌工程实验的机会是无限的,可能会根据分布式系统的架构和组织的核心业务代价而有所不同。

1.2 履行混沌工程的先决条件

要确定是否已准备好开始采取混沌工程,须要回答一个问题:你的系统是否能够适应现实天下中的事宜,例如做事故障和网络延迟峰值?

如果答案是“否”,那么你还有一些事情要做。

混沌工程非常适宜戳穿生产系统中未知的弱点,但如果确定混沌工程实验会导致系统涌现严重问题,那么运行该实验就没有任何意义。
先办理这个弱点,然后回到混沌工程,它将创造你不理解的其他弱点,或者它会让你创造你的系统实际上是有弹性的。
混沌工程的另一个基本要素是可用于确定系统当前状态的监控系统。

1.3 混沌工程原则

为了详细地办理分布式系统在规模上的不愿定性,可以把混沌工程看作是为了揭示系统弱点而进行的实验。
毁坏稳态的难度越大,我们对系统行为的信心就越强。
如果创造了一个弱点,那么我们就有了一个改进目标。
避免在系统规模化之后问题被放大。
以下原则描述了运用混沌工程的空想办法,这些原则来履行实验过程。
对这些原则的匹配程度能够增强我们在大规模分布式系统的信心。

二、阿里巴巴在混沌工程领域的实践:故障演习训练

混沌工程属于一门新兴的技能学科,行业认知和实践积累比较少,大多数IT团队对它的理解还没有上升到一个领域观点。
阿里电商域在2010年旁边开始考试测验故障注入测试的事情,开始的目标是想办理微做事架构带来的强弱依赖问题。
后来经由多个阶段的改进,终极演进到 MonkeyKing(线上故障演习训练平台)。
从发展轨迹来看,阿里的技能演进和Netflix的技能演进基本是同韶光线的,每个阶段方案的出身都有其独特的时期背景和业务难点,也可以看到当时技能的局限性和打破。

2.1 建立一个环绕稳定状态行为的假说

目前阿里巴巴集团范围内的实践倾向于故障测试,即在一个详细场景下履行故障注入实验并验证预期是否得到知足。
这种测试的风险相对可控,坏处是并没有通过故障注入实验探索更多的场景,暴露更多的潜在问题,测试结果比较依赖履行人的履历。
当前故障测试的预期比较两级分解,要么过于关注系统的内部细节,要么对付系统的表现完备没有预期,与混沌工程定义的稳态状态行为差异比较大。

引起差异的根本缘故原由还是组织形态的不同。
2014年,Netflix团队创建了一种新的角色,叫作混沌工程师(Chaos Enigneer),并开始向工程社区推广。
而阿里目前并没有一个专门的职位来履行混沌工程,项目目标、业务场景、职员构造、履行办法的不同导致了对付稳定状态行为的定义不太标准。

2.2 多样化真实天下的事宜

阿里巴巴由于多元化的业务场景、规模化的做事节点及高度繁芜的系统架构,每天都会碰着各式各样的故障。
这些故障信息便是最真实的混沌工程变量。
为了能够更体感、有效率地描述故障,我们优先剖析了P1和P2的故障(P是阿里对故障等级的描述),提出一些通用的故障场景并按照IaaS层、PaaS层、SaaS层的角度绘制了故障画像。

从故障的完备性角度来看,上述画像只能粗略代表部分已涌现的问题,对付未来可能会涌现的新问题也须要一种手段保持兼容。
在更深入的进行剖析之后,我们定义了另一维度的故障画像:

任何故障,一定是硬件如IaaS层,软件如PaaS或SaaS的故障。
并且有个规律,硬件故障的征象,一定可以在软件故障征象上有所表示。

故障一定从属于单机或是分布式系统之一,分布式故障包含单机故障。

对付单机或同机型的故障,以系统为视角,故障可能是当提高程内的故障,比如:如FullGC,CPU飙高;进程外的故障,比如其他进程溘然抢占了内存,导致当前系统非常等。

同时,还可能有一类故障,是人为失落误,或流程失落当导致,这部分我们本日不做重点谈论。

从故障注入实现角度,我们也是参照上述的画像来设计的。
之前我们是通过Java字节码技能和操作系统层面的工具来分别仿照进程内和进程外的故障。
随着Serverless、Docker等新架构、新技能的涌现,故障实现机制和承接载体也将会有一些新的变革。

2.3 在生产环境中运行实验

从功能性的故障测试角度来看,非生产环境去履行故障注入是可以知足预期的,以是最早的强弱依赖测试便是在日常环境中完成的。
不过,由于系统行为会根据环境和流量模式有所不同,为了担保系统实行办法的真实性与当前支配系统的干系性,推举的履行办法还是在生产环境(仿真环境、沙箱环境都不是最好的选择)。

很多同学恐怖在生产环境实行实验,缘故原由还是担心故障影响不可控。
履行实验只是手段,通过实验对系统建立信心是我们的目标。
关于如何减少实验带来的影响,这点在\公众最小化爆炸半径\"大众部分会有阐述。

2.4 持续自动化运行实验

2014年,线下环境的强弱依赖测试用例是默认在每次发布后自动实行的。
2015年,开始考试测验在线上进行自动化回归。
不过发展到最近两年,手动实验的比例逐渐变高。
缘故原由也不繁芜,虽然故障注入自动化了,业务验证的本钱仍旧比较高。
在业务高速发展、职员变革较快的环境之下,保持一套相对完善的线上回归用例集对是见非常难的事情。
虽然也涌现了流量录制技能,不过由于混沌工程实验本身会冲破系统已有的行为,基于入口和出口的流量比对的参考度就低落许多。

为理解决测试本钱问题,2017年初开始推进线上微灰度环境的培植。
基于业务、比例来筛选特色流量,通过真实的流量来更换原来的测试流量,通过监控&报警数据来替代测试用例结果。
目前已经有部分业务基于微灰度+故障演习训练的模式来做演习训练验证(比如:盒马APOS容灾练习)。

由于故障演习训练之前是作为一个技能组件被嵌入到常态和大匆匆的流程中,以是在系统构建自动化的编排和剖析方面的产品度并不高。
演习训练可视化编排和能力开放会是我们团队未来的一个重点,下文中的方案部分会有所阐述。

2.5 最小化爆炸半径

在生产中进行试验可能会造成不必要的客户投诉,但混沌工程师的任务和责任是确保这些后续影响最小化且被考虑到。
对付实验方案和目标进行充分的谈论是减少用户影响的最主要的手段。
但是从实际的履行角度看,最好还是通过一些技能手段去最小化影响。
Chaos Engineering和Fault Injection Test的核心差异在于:是否可以进一步减小故障的影响,比如微做事级别、要求级别乃至是用户级别。
在MonkeyKing演进的中期阶段,已经可以实现要求级别的微做事故障注入。
虽然那个时候演习训练履行的紧张位置在测试环境,但初衷也是为了减少由于注入故障而导致的环境不稳定问题。
除了故障注入,流量路由和数据隔离技能也是减少业务影响的有效手段。

三、未来的操持

线上故障演习训练发展到本日是第三年,随着阿里安全生产的大环境、业务方的诉求、研发迭代模式的变革,以及大家对混沌工程的接管和认识程度的提高。
集团的演习训练领域会向着未来的几个目标发力:

建立高可用专家库,构造化提高运用容错能力(办理\"大众稳定状态定义\"大众的问题)

培植故障注入实现标准,集团内开源,提升故障仿照的广度和深度(拓宽\"大众多样化真实天下的事宜\"大众的广度)

规模化覆盖核心业务(提升\"大众在生产环境中运行实验\公众的规模)

以产品化、平台化思路开放演习训练能力(探索\公众自动化运行实验\公众的办法)

四、触手可及的混沌工程

MonkeyKing已经供应商业化产品,欢迎在阿里云官网搜索“AHAS”,进行免费公测。
地址:https://www.aliyun.com/product/ahas

本文作者:中亭

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除,如需转载请保留原文地址:http://www.baanla.com/lz/zxsj/56473.html

XML地图 | 自定链接

Copyright 2005-20203 www.baidu.com 版权所有 | 琼ICP备2023011765号-4 | 统计代码

声明:本站所有内容均只可用于学习参考,信息与图片素材来源于互联网,如内容侵权与违规,请与本站联系,将在三个工作日内处理,联系邮箱:123456789@qq.com