ChaosBlade:从零开始的混沌工程(一)

简介: 本篇为系列文章开篇,主要介绍混动工程以及混沌工程实验工具 ChaosBlade,后续会从实践的角度带领读者上手实践混沌工程,了解混沌工程的方法及原理。

前言

随着微服务的盛行以及容器技术的普及,借助 Kubernetes 的容器编排能力,部署一套分布式系统的难度也越来越低。但随之而来的是越来越复杂的系统,以及越来越难的系统可靠性测试,有时仅仅是一个接口的故障,就可能导致整个系统的雪崩。在雪崩中,找到那个最初故障的接口也十分困难,因为到处都在报错。

为了解决这些问题,除了不断减少服务的耦合,建立强大的监控系统以及设置熔断、限流等策略等方式,这时混沌工程就出现了。

什么是混沌工程

根据混沌工程原则(PRINCIPLES OF CHAOS ENGINEERING)混沌工程是在分布式系统上进行实验的学科, 目的是建立对系统抵御生产环境中失控条件的能力以及信心。

大规模分布式软件系统的发展正在改变软件工程。作为一个行业,我们很快就采用了提高开发灵活性和部署速度的实践。但伴随着这些优点,一个迫切问题出现了,那就是:我们对投入生产的复杂系统有多少信心?

即使分布式系统中的所有单个服务都正常运行, 但这些服务之间的交互也会导致不可预知的结果。这些不可预知的结果, 由影响生产环境的罕见且具有破坏性的事件复合而成,令这些分布式系统存在内在的混沌。

需要在异常行为出现之前,在整个系统内找出这些弱点。这些弱点包括以下形式:

  • 当服务不可用时的不正确回滚设置
  • 不当的超时设置导致的重试风暴
  • 由于下游依赖的流量过载导致的服务中断
  • 单点故障时的级联失败等

在这些弱点通过生产环境暴露给用户之前,必须主动的发现这些重要的弱点。并需要一种方法来管理这些系统固有的混沌, 通过增加的灵活性和速率以提升我们对生产环境部署的信心, 尽管系统的复杂性是由这些部署所导致的。

采用基于经验和系统的方法解决了分布式系统在规模增长时引发的问题, 并以此建立对系统抵御这些事件的能力和信心。通过在受控实验中观察分布式系统的行为来了解它的特性,我们称之为混沌工程

ChaosBlade

ChaosBlade 中文名混沌之刃,是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,是内部项目 MonkeyKing 对外开源的项目,其建立在阿里巴巴近十年故障测试和演练实践基础上,结合了集团各业务的最佳创意和实践。旨在帮助企业提升分布式系统的容错能力,并且在企业上云或往云原生系统迁移过程中业务连续性提供保障。

目前支持的场景有:基础资源Java 应用C++ 应用Docker 容器以及 Kubernetes 平台。该项目将场景按领域实现封装成单独的项目,不仅可以使领域内场景标准化实现,而且非常方便场景水平和垂直扩展,通过遵循混沌实验模型,实现 chaosblade cli 统一调用。

该项目体验极好,仅需一个可执行文件 blade,就可完成多种场景的实验(一些复杂场景如 Java 应用实验,则需要相关工具包),同时如果不想下载 chaosblade 工具包,快速体验 chaosblade,可以拉取 docker 镜像并运行,在容器内体验。

快速体验

该项目于 2020 年 5 月 27 日发布了最新了 v0.6.0 版本,本系列文章的全部实践也将基于这个版本以及该版本的修复版本 v0.6.x 进行。

ChaosBlade-Operator

ChaosBlade-Operator 是 ChaosBlade 的 Kubernetes 平台实验场景实现,也是本系列文章主要使用的工具。其将混沌实验通过 Kubernetes 标准的 CRD 方式定义,很方便的使用 Kubernetes 资源操作的方式来创建、更新、删除实验场景,包括使用 kubectl、client-go 等方式执行,而且还可以使用上述的 chaosblade cli 工具执行。

Pod 网络延迟场景

结语

本篇为系列文章开篇,主要介绍混动工程以及混沌工程实验工具 ChaosBlade,后续会从实践的角度带领读者上手实践混沌工程,了解混沌工程的方法及原理。实践出真知,在后续的文章后,我们将从 ChaosBlade-Operator 的安装部署、实验配置、实验观测及实验销毁等方面,详细介绍 ChaosBlade 的功能。同时也会介绍在不同场景下混沌工程是如何帮助开发者发现系统中的问题,并达到逐渐建设高可用的韧性系统的目的。

参考

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes 容灾 测试技术
ChaosBlade详细介绍
ChaosBlade 是阿里巴巴 2019 年开源的混沌工程项目,包含混沌工程实验工具 chaosblade 和混沌工程平台 chaosblade-box,旨在通过混沌工程帮助企业解决云原生过程中高可用问题。【2月更文挑战第11天】
2346 12
|
缓存 Java Shell
【alibaba/jvm-sandbox#06】事件监听的关键设计
介绍jvm-sandbox中事件机制的设计,通过用事件Id与事件之间的映射关系进行解耦,通过Spy类的静态方法携带事件Id进行核心事件逻辑的埋点注入
771 0
测试闭环
一、需求评审 1.需求评审的目的 明确功能优先级,评审业务流程设计的合理性,评估技术可行性。 2.需求评审中注意事项 a)提前了解产品需求,明确核心流程、功能结构 b)评审过程中不避免乏味,时间越长越容易分心,所以先了解重点模块,循序渐进 c)评审中遇到争议点,避免发散讨论,引导大家快速决策,明确沟通,明确产品拍板 d)评审中遇到无法决策的点,记录下来,会后处理,不过多纠缠,后续让产品决策后更新需求文档。
4172 0
|
Kubernetes Cloud Native Java
大规模 Kubernetes 集群故障注入的利器-ChaosBlade
本文将主要介绍 ChaosBlade 在 Kubernetes 中故障注入的底层实现原理、版本优化过程以及大规模应用演练测试。01
1202 108
大规模 Kubernetes 集群故障注入的利器-ChaosBlade
|
Kubernetes 小程序 Docker
ChaosBlade安装问题之通过kubectl安装chaosblade-operator如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
|
Arthas 监控 安全
浅谈阿里开源JVM Sandbox(内含代码实战)
浅谈阿里开源JVM Sandbox(内含代码实战)
47979 6
浅谈阿里开源JVM Sandbox(内含代码实战)
|
机器学习/深度学习 人工智能 算法
AI辅助医疗影像:提高诊断准确性
【10月更文挑战第2天】医学影像技术是现代医学诊断的关键手段,但传统方法依赖医生经验,存在误诊风险。AI辅助医疗影像通过自动化图像识别、疾病预测和辅助诊断决策,显著提升了诊断准确性与效率。利用深度学习、数据增强及迁移学习等技术,AI不仅能快速分析影像,还能提供个性化诊疗建议,并实时监测疾病变化。尽管面临数据质量、算法可解释性和伦理法律等挑战,但多模态影像分析、跨学科合作及VR融合等趋势将推动AI在医疗影像领域的广泛应用,助力实现更精准、高效的医疗服务。
1213 3
|
存储 JavaScript API
Vue 3 中实现引导页
Vue 3 中实现引导页
|
缓存 应用服务中间件 Linux
Linux系统中基于NGINX的代理缓存配置指南
配置后,NGINX将缓存后端服务器的响应,并根据缓存配置进行有效期控制。这样可以加速页面加载并减轻后端服务器的负担。
390 0
|
Kubernetes Cloud Native Java
混沌工程:基于ChaosBlade的可持续故障演练实践
混沌工程:基于ChaosBlade的可持续故障演练实践
1289 0

热门文章

最新文章