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

混沌工程属于一门新兴的技术学科,行业认知和实践积累比较少,大多数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演进的中期阶段,已经可以实现请求级别的微服务故障注入。虽然那个时候演练实施的主要位置在测试环境,但初衷也是为了减少因为注入故障而导致的环境不稳定问题。除了故障注入,流量路由和数据隔离技术也是减少业务影响的有效手段。

三、未来的计划

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

建立高可用专家库,结构化提高应用容错能力(解决"稳定状态定义"的问题)

建设故障注入实现标准,集团内开源,提升故障模拟的广度和深度(拓宽"多样化真实世界的事件"的广度)

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

以产品化、平台化思路开放演练能力(探索"自动化运行实验"的方式)

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将视觉深度学习模型应用于非视觉领域

介绍 近些年来,深度学习技术已经彻底改变了计算机视觉领域。由于迁移学习和各种各样的学习资源的出现,任何人都可以通过使用预训练的模型,将其应用到自己的工作当中,以此获得非常好的结果。随着深度学习越来越商业化,…

如何在Flutter上优雅地序列化一个对象

序列化一个对象才是正经事 对象的序列化和反序列化是我们日常编码中一个非常基础的需求,尤其是对一个对象的json encode/decode操作。每一个平台都会有相关的库来帮助开发者方便得进行这两个操作,比如Java平台上赫赫有名的GSON,阿里巴巴开源…

腾讯汤道生:2020年加大投入产业互联网生态建设

新一轮产业革命正在不断深化,为全球经济发展提供了历史性机遇。如何通过数字化、智能化等手段打通产业链不同环节,优化产业效率,实现产业协同,加速产业转型升级? “与合作伙伴‘共创’是产业互联网发展最重要的路径&am…

优酷IPv6改造纪实:视频行业首家拥抱下一代网络技术

阿里妹导读:2018年双11前,优酷开启了IPV6的大门。9月份PC端业务开启灰度,迎来首位IPV6 VIP用户后,优酷移动客户端也马不停蹄地加入灰度大军。从0到1,花了几个月;从10到1000,花了几天&#xff1b…

服务器上的文件怎么取名,给新的服务器取名你会取神马?

亲爱的谕霸们:本周话题 emmmm.....又一次想话题想到脑壳痛,忽然想到,要不然大家也来想一个,于是乎就是......噢对了,看到论坛的宝宝们都晒出来2018年新年历了,怎么能少了APP的宝宝们?&#xff1…

NVIDIA发布全新推理软件,开创交互式会话AI新时代!

近日, NVIDIA发布了一款突破性的推理软件。借助于该软件,全球各地的开发者都可以实现会话式AI应用,大幅减少推理延迟。而此前,巨大的推理延迟一直都是实现真正交互式互动的一大阻碍。 NVIDIA TensorRT™ 7作为NVIDIA第七代推理软件…

可应用于实际的14个NLP突破性研究成果(二)

论文摘要 尽管最近在训练高质量的句子嵌入上做出了很多的努力,但是大家仍然对它们所捕捉的内容缺乏了解。基于句子分类的‘Downstream’tasks通常用于评估句子表示的质量。然而任务的复杂性使得它很难推断出句子表示中出现了什么样的信息。在本文将介绍10个probing…

可应用于实际的14个NLP突破性研究成果(三)

论文摘要 当前最先进的语义角色标记(SRL)使用深度神经网络,但没有明确的语言特征。之前的工作表明,抽象语法树可以显著改善SRL,从而提高模型准确性。在这项研究中,我们提出了语言学的自我关注(…

服务器cpu虚拟插槽,服务器更换cpu插槽

服务器更换cpu插槽 内容精选换一换弹性云服务器创建成功后,您可以根据需求,修改云服务器的名称。系统支持批量修改多台弹性云服务器的名称,修改完成后,这些弹性云服务器的名称相同。登录管理控制台。单击管理控制台左上角的&#…

云+X案例展 | 民生类:贝斯平云助力500强跨国企数字化转型

本案例由贝斯平云投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“云行业”的健康发展。在全球化的科技进步和…

基于Alluxio系统的Spark DataFrame高效存储管理技术

介绍 越来越多的公司和组织开始将Alluxio和Spark一起部署从而简化数据管理,提升数据访问性能。Qunar最近将Alluxio部署在他们的生产环境中,从而将Spark streaming作业的平均性能提升了15倍,峰值甚至达到300倍左右。在未使用Alluxio之前&#…

云+X案例展 | 金融类:青云QingCloud助力泰康人寿云计算演进之路

本案例由荣之联投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“云行业”的健康发展。泰康保险泰康云平台 青…

阿里云Kubernetes容器服务上体验Knative

概述 Knative Serving是一种可缩放至零、请求驱动的计算运行环境,构建在 Kubernetes 和 Istio 之上,支持为 serverless 应用、函数提供部署与服务。Knative Serving的目标是为Kubernetes提供扩展功能,用于部署和运行无服务器工作负载。 下面…

IoT Studio + LoRa打造“又猛又持久”的智能厕所

概述 为了增加厕所使用效率,减少被味道“熏陶”的等待时间,同时也为了增加厕所的清洁效率,我们决定做一个非侵入式的智能厕所改造方案。它可以通过红外热释电检测每个坑位有没有人,在web/app上实时显示,方便如厕人员查…

分布式事务中间件Fescar—全局写排它锁解读

前言 一般,数据库事务的隔离级别会被设置成 读已提交,已满足业务需求,这样对应在Fescar中的分支(本地)事务的隔离级别就是 读已提交,那么Fescar中对于全局事务的隔离级别又是什么呢?如果认真阅…

萤石网络摄像头服务器稳定吗,萤石摄像头画面稳定性如何?

稳定性很好,体现在:1、C1S互联网摄像头提供400万像素的摄像头,拥有双向实时语音功能,包括内置温湿度传感器、内置备用电池以及“放大镜”功能。2、萤石爱家神器C2采用内置6块光学镜片的监控镜头,720P图像会保证视频画面…

GTC CHINA 2019 | 黄仁勋发表主题演讲,多项创新技术与合作全面助力 AI 加速落地

近日,NVIDIA 创始人兼首席执行官黄仁勋在中国苏州举办的 GTC China 大会上发表主题演讲,宣布多项创新技术与合作,并阐述了 NVIDIA 如何助力 AI 加速进入大规模应用。 GTC China 是 NVIDIA 每年在中国最重要的大会,今年更是吸引了 …

Kubernetes 调度器实现初探

Kubernetes 调度器 Kubernetes 是一个基于容器的分布式调度器,实现了自己的调度模块。 在Kubernetes集群中,调度器作为一个独立模块通过pod运行。从几个方面介绍Kubernetes调度器。 调度器工作方式 Kubernetes中的调度器,是作为单独组件运…

NVIDIA发布先进的软件定义自主机器平台DRIVE AGX Orin

近日,NVIDIA发布了用于自动驾驶和机器人的高度先进的软件定义平台——NVIDIA DRIVE AGX Orin™。 该平台内置全新Orin系统级芯片。该芯片由170亿个晶体管组成,凝聚着NVIDIA团队为期四年的努力。Orin系统级芯片集成了NVIDIA新一代GPU架构和Arm Hercules C…

OceanBase在蚂蚁金服的智能运维实践之路

OB君:蚂蚁金服资深技术专家虞舜将在本文为大家分享蚂蚁金服数据库所面对的业务挑战,解读OceanBase的自治数据库体系,解密OceanBase在天猫双11大促期间的稳定性解决方案,探索OceanBase在蚂蚁金服的智能运维实践之路。本文整理自Oce…