消息队列和应用工具产品体系-混沌工程简介

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
性能测试 PTS,5000VUM额度
简介: 消息队列和应用工具产品体系-混沌工程简介

开发者学习笔记【阿里云云原生助理工程师认证(ACA)课程:消息队列和应用工具产品体系-混沌工程简介】

课程地址:https://edu.aliyun.com/course/3112075/lesson/19043


消息队列和应用工具产品体系-混沌工程简介

 

内容介绍:

一、 混沌工程的理论简介

二、 混沌工程的发展和实践原则

三、 阿里开源混沌工程产品 Chaos Blade

 

一、 混沌工程的理论简介

image.png

接下来的小节,将为同学介绍高可用策略中的另一个重要概念混沌工程。在之前的分布式微服架构下的高可用设计中,讲解了高可用设计中一个非常重要的概念即假定失效原则。在假定失效原则中,我们提到任何一个系统都会遇到未曾可知故障出现的场景,即使是程序内部完全没有错误,也会面临着外部资源出现故障的 情况下。而在分布式系统架构下,服务间的依赖日益紧密,调用链路更加复杂,如何保证系统在故障环境下的健壮性和高可用性,是开发者不得不面临的巨大挑战。混沌工程的思想正是在这种环境下诞生的,混沌工程思想指的是,通过一种在生产环境中周期性的引入故障变量的方法,来验证系统对非运期故障防御措施的有效性的测试思想。例如,通过分布式架构的自动修复能力和熔断降级功能,可以屏蔽因外部故障导致的错误雪崩和服务异常甚至服务不可用。但是在生产环境中,这些小概率错误往往难以出现。而这些容错功能,在面对实际生产环境中的错误时,发挥出来的对应效果到底如何?往往使开发者难以对其进行有效的把握。而通过混沌工程思想,开发者摆脱了在生产环境中被动等待故障的做法,变为主动向系统中引入故障,并且在引入故障之后,观察容错设计在故障出现之后的表现,从而提前掌握系统在真实故障环境下的运行状态,及时找出系统中隐藏的不稳定因素并加以改进。为提高系统在小概率故障下的可用性提供了数据和场景的支撑。通俗的讲,如果说传统的高可用手段强调避免故障,就像是通过洗手来避免病毒和细菌的感染的话,混沌工程理论就如同注射疫苗,通过主动引入病毒的办法,来提高系统的整体免疫力,使开发者面对真正的故障来临时的场景做到胸有成竹,以提高系统的危机响应速度和响应质量。

 

二、 混沌工程的发展和实践原则

 

image.png

 

在混沌工程思想发展的过程中,Netflix 网飞公司的工程实践可以说起到了非常重要的作用。

在2010年,当时网飞公司因为业务的发展,决定对他们的单体架构应用 进行云计算改造,将原本部署在自己物理机房中的服务,逐步迁移到亚马逊 AWS 云计算系统上。而当时的云计算技术还远达不到今天的发展水平。亚马逊的虚拟机的稳定性和可靠性相比较网飞公司自己运营的物理服务器还不能达到完全让开发者放心的阶段。在这种情况下,为了保障在业务向云上迁移之后,服务的可靠性能够达到业务部门的需求,网飞公司开发了 Chaos Monkey 工具。通过 Chaos Monkey 主动模拟虚拟机节点失效的情况,来检测云上部署系统的健性。并发现存在内部状态的应用。这里提到的内部状态的应用,甚至数据计算服务中包含着系统运行所必须的数据信息,这种包含数据信息的服务,不符合数据计算和存储分离的原则。一旦数据计算服务不可用,所保存的数据信息就可能会丢失。从而造成不可恢复的故障。而通过 Chaos Monkey 的随机节点故障失效模拟功能,网飞公司的技术团队排除了服务中存在内部状态的情况,保证了应用在当时还不稳定的云计算环境上的迁移成功。

2011年在 Chaos Monkey 工具获得成功之后,网飞公司又在 Chaos Monkey 的基础上进一步扩充了主动故障应用工具,增加了多种故障驻入模式,可以测试更多的故障驻入场景,形成了猴子军团工具机,并在2012年将猴子军团攻击机开源。随着微服架构的不断推进,分布式的微服架构逐渐成了企业级应用的主流架构。而微服架构下分布式调用的复杂程度也越来越高,系统的故障不但要考虑外部环境因素,同时还要考虑内部组件失效的情况下。

因此在2014年的时候,网飞公司在猴子军团的基础上提出了故障注入测试的概念。将 Chaos Monkey 升级成为了 FIT。FIT 除了传统的环境故障注入功能,同时还引入了可以精确控制爆炸半径的微服故障驻入功能。其中精确控制爆炸半径是指,利用微服务架构的特性,减少混沌测试对生产环境的负面影响,使得混沌测试可以随着微服架构的快速迭代频繁的进行。

经过七年的发展,在2017年,混沌工程的理论概念已经被业界广泛认可。同时由网飞公司前员工编写的混沌工程一书,也出版上市。FIT应用也再次升级为了 Chap 混沌测试自动平台,混沌测试成为了应用上线之前必备的测试手段。面向失败的设计,也逐渐成为了构建一个高可用架构产品的基本要求,混沌工程思想也在更多的公司进行的实践。

 

三、 阿里开源混沌工程产品 Chaos Blade

 

image.png

 

1. 从2018年开始服务化改造之时,阿里巴巴就意识到了失败性设计的重要性。和网飞公司不同,阿里巴巴的服务上云之路,依托的是自由云平台进行开展。

因此,在2012年推出自己的故障演练平台 EOS 时,阿里巴巴首先考虑的并不是云平台的稳定性,而是业务进行分布式孵化改造之后,远程调用的可靠性和健壮性的问题。因此, EOS 提供了通过自解码注入的方式,来模拟常见的远程调用 RPC 故障,以此来测试服务之间的依赖关系的健壮性和容错性设计,并解决微服务的强弱依赖治理问题。

2016年,阿里巴巴将故障演练平台升级为了 MonkeyKing ,并丰富了如资源容器层面的故障场景,并开始在生产环境中进行一些规模化的演练。

2018年,阿里云在 MonkeyKing 和熔断限流服务的 3tneo 的 基础上,推出了阿里云应用高可用服务 AHAS 产品,AHAS 内置了平台的全部功能,同时还可以进行编排演练、演练插件扩展等能力。

2019年通过对 MonkeyKing 演练平台底层的故障注入能力进行抽象,阿里巴巴定义了一套故障演练模型,并配合用户友好的 Chaos 工具进行了开源。在开源后,将这个产品命名为了 ChaosBlade 。

2. ChaosBlade 主要功能特点有如下几点:

场景丰富度高ChaosBlade 支持的混沌测试场景,不但覆盖 基础资源,如CPU 满载、482L 高裸延迟等,还包括运行在 GVM 上的应用的事业场景。如 Double 调用超时和调用异常、指定方法延迟或抛出异常以及返回特定指导。同时涉及容器相关的实验,如沙容器、沙剖的。

二使用简洁,便于理解ChaosBlade 通过 CLI 方式执行,具 有友好的命令提示功能,可以简单快速的上手使用。命令的书写遵循阿里巴巴集团内部多年故障以来演练和演练实践抽象出来的故障注入模型,层次清晰,易于阅读和理解,降低了混沌工程实施的门槛。

三场景扩展容易所有的 play 的实验执行器,同样遵守上述提交的故障模型,使得实验场景模型统一,便于开发和维护。模型本身通俗易懂,学习成本低,可以根据模型方便的扩展更多的混沌实验场景。

相关文章
|
5月前
|
消息中间件 测试技术 RocketMQ
消息队列 MQ产品使用合集之在异步发送消息函数sendMessage()中出现了错误,错误代码为-3,该如何解决
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 监控 Oracle
消息队列 MQ产品使用合集之启动Namesrv节点时,遇到报错,该如何解决
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 存储 Java
Java中的消息队列应用与性能优化
Java中的消息队列应用与性能优化
|
5月前
|
消息中间件 网络协议 JavaScript
消息队列 MQ产品使用合集之报错提示是"the internal error!",是什么原因导致的”
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
消息中间件 监控 Java
在Java应用中实现微服务间的消息队列通信
在Java应用中实现微服务间的消息队列通信
|
4月前
|
消息中间件 存储 Java
Java中的消息队列应用与性能优化
Java中的消息队列应用与性能优化
|
5月前
|
消息中间件 Java API
消息队列 MQ产品使用合集之遇到"No topic route info in name server for the topic"错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 Java Shell
消息队列 MQ产品使用合集之启动broker&proxy的时候会报错,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
消息中间件 C语言 RocketMQ
消息队列 MQ操作报错合集之出现"Connection reset by peer"的错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。