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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 消息队列和应用工具产品体系-混沌工程简介

开发者学习笔记【阿里云云原生助理工程师认证(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天前
|
消息中间件 分布式计算 监控
Python面试:消息队列(RabbitMQ、Kafka)基础知识与应用
【4月更文挑战第18天】本文探讨了Python面试中RabbitMQ与Kafka的常见问题和易错点,包括两者的基础概念、特性对比、Python客户端使用、消息队列应用场景及消息可靠性保证。重点讲解了消息丢失与重复的避免策略,并提供了实战代码示例,帮助读者提升在分布式系统中使用消息队列的能力。
42 2
|
5天前
|
消息中间件 NoSQL Java
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
308 1
|
5天前
|
消息中间件 存储 传感器
Kafka消息队列原理及应用详解
【5月更文挑战第6天】Apache Kafka是高性能的分布式消息队列,常用于实时数据管道和流应用。它提供高性能、持久化、分布式和可伸缩的消息处理,支持解耦、异步通信和流量控制。Kafka的核心概念包括Broker、Topic、Partition、Producer、Consumer和Consumer Group。其特点是高吞吐、低延迟、数据持久化、分布式架构和容错性。常见应用包括实时数据流处理、日志收集、消息传递和系统间数据交换。
|
5天前
|
消息中间件 人工智能 监控
|
5天前
|
消息中间件 存储 监控
解析RocketMQ:高性能分布式消息队列的原理与应用
RocketMQ是阿里开源的高性能分布式消息队列,具备低延迟、高吞吐和高可靠性,广泛应用于电商、金融等领域。其核心概念包括Topic、Producer、Consumer、Message和Name Server/Broker。RocketMQ支持异步通信、系统解耦、异步处理和流量削峰。关键特性有分布式架构、顺序消息、高可用性设计和消息事务。提供发布/订阅和点对点模型,以及消息过滤功能。通过集群模式、存储方式、发送和消费方式的选择进行性能优化。RocketMQ易于部署,可与Spring集成,并与Kafka等系统对比各有优势,拥有丰富的生态系统。
172 4
|
5天前
|
消息中间件 Linux API
Linux进程间通信(IPC) Linux消息队列:讲解POSIX消息队列在Linux系统进程间通信中的应用和实践
Linux进程间通信(IPC) Linux消息队列:讲解POSIX消息队列在Linux系统进程间通信中的应用和实践
32 1
Linux进程间通信(IPC) Linux消息队列:讲解POSIX消息队列在Linux系统进程间通信中的应用和实践
|
5天前
|
消息中间件 存储 负载均衡
简单入门:消息队列的概念和应用
在复杂的系统架构中,组件间的通信是至关重要的问题。消息队列作为一种解决方案,能够使组件之间的通信更加高效、可靠。本文将从简单到复杂,逐步向您介绍消息队列的概念、使用场景以及如何实现。
114 3
|
5天前
|
消息中间件 BI Serverless
消息队列推出serverless版、Quick BI升级至5.0……阿里云近期产品动态汇总
消息队列推出serverless版、Quick BI升级至5.0……阿里云近期产品动态汇总
483 1
|
5天前
|
消息中间件 监控 负载均衡
Kafka高级应用:如何配置处理MQ百万级消息队列?
在大数据时代,Apache Kafka作为一款高性能的分布式消息队列系统,广泛应用于处理大规模数据流。本文将深入探讨在Kafka环境中处理百万级消息队列的高级应用技巧。
188 0
|
6月前
|
消息中间件 存储 NoSQL
MQ消息队列篇:三大MQ产品的必备面试种子题
MQ(Message Queue)作为一种用于实现异步通信的技术,具有重要的作用和应用场景。在面试过程中,MQ相关的问题经常被问到,因此了解MQ的用途和设计原则是必不可少的。本文总结了MQ的常见面试题,包括MQ的作用、产品选型、消息不丢失的保证、消息消费的幂等性、消息顺序的保证、消息的高效读写、分布式事务的最终一致性等方面。通过深入理解这些问题,可以更好地理解MQ的应用和设计,为面试和实际应用提供参考。
120 0
http://www.vxiaotou.com