关于开源:ChaosBlade从混沌工程实验工具到混沌工程平台

34次阅读

共计 5715 个字符,预计需要花费 15 分钟才能阅读完成。

作者 | 肖长军(穹谷)桑杰

ChaosBlade 是阿里巴巴 2019 年开源的混沌工程项目,已退出到 CNCF Sandbox 中。起初蕴含面向多环境、多语言的混沌工程试验工具 chaosblade,到当初倒退到面向多集群、多环境、多语言的混沌工程平台 chaosblade-box,平台反对试验工具托管和工具自动化部署,通过对立用户试验界面,将用户的精力聚焦在通过混沌工程解决云原生过程中高可用问题上。本文从混沌试验模型形象、混沌试验工具开源和混沌工程平台降级我的项目三阶段登程,具体介绍 ChaosBlade。

在往年可信云测评中,阿里云故障演练平台以最高分首批通过可信云混沌工程平台能力要求最高等级 - 先进级认证。

混沌试验模型

ChaosBlade 我的项目笼罩根底资源、应用服务、容器服务等混沌试验场景。在试验工具设计之初就思考了场景模型对立,便于场景扩大和积淀,也为平台托管试验工具实现对立场景调用提供模型根据。ChaosBlade 我的项目中所有的试验场景均遵循此试验模型设计,上面通过试验模型的推导、介绍、意义和具体的利用来具体介绍此模型。

1、试验模型的推导

混沌试验次要蕴含故障模拟,咱们个别对故障的形容如下:

  • 10.0.0.1 机器上挂载的 A 磁盘满造成了服务不可用;
  • 所有节点上的 B dubbo 服务因为执行迟缓造成上游 A dubbo 服务调用提早,从而造成用户拜访迟缓;
  • Kubernetes A 集群中 B 节点上 CPU 所有核使用率满载,造成 A 集群中的 Pod 调度异样;
  • Kubernetes C 集群中 D Pod 网络异样,造成 D 相干的 Service 拜访异样。

通过上述,咱们能够应用以下句式来形容故障:因为某某机器(或集群中的资源,如 Node,Pod)上的哪个组件产生了什么故障,从而造成了相干影响。咱们也能够通过下图来看故障形容拆分:

能够通过这四局部来形容现有的故障场景,所有咱们形象出了一个故障场景模型,也称为混沌试验模型。

2、试验模型的介绍

此试验模型详细描述如下:

  • Scope: 试验施行范畴,指具体实施试验的机器、集群及其资源等。
  • Target: 试验靶点,指试验产生的组件。如根底资源场景中的 CPU、网络、磁盘等,Java 场景中的利用组件如 Dubbo、Redis、RocketMQ、JVM 等,容器场景中的 Node、Pod、Container 本身等。
  • Matcher: 试验规定匹配器,依据所配置的 Target,定义相干的试验匹配规定,能够配置多个。因为每个 Target 可能有各自非凡的匹配条件,比方 RPC 畛域的 Dubbo、gRPC 能够依据服务提供者提供的服务和服务消费者调用的服务进行匹配,缓存畛域的 Redis,能够依据 set、get 操作进行匹配。还能够对 matcher 进行扩大,比方扩大试验场景执行策略,管制试验触发工夫。
  • Action: 指试验模仿的具体场景,Target 不同,施行的场景也不一样,比方磁盘,能够演练磁盘满,磁盘 IO 读写高,磁盘硬件故障等。如果是利用,能够形象出提早、异样、返回指定值(错误码、大对象等)、参数篡改、反复调用等试验场景。如果是容器服务,能够模仿 Node、Pod、Container 资源异样或者其上的根底资源异样等。

应用此模型能够很清晰表白出以下施行混沌试验须要明确的问题:

  • 混沌试验的施行范畴是什么
  • 施行混沌试验的对象是什么
  • 试验对象触发试验的条件有哪些
  • 具体实施什么试验场景

3、试验模型的意义

此模型具备以下特点:

  • 简洁:档次清晰,通俗易懂;
  • 通用:笼罩目前所有的故障场景,蕴含根底资源、应用服务、容器服务、云资源等;
  • 易实现:很不便的定义清晰的接口标准,试验场景扩大实现简略;
  • 语言、畛域无关:能够扩大多语言、多畛域的模型实现。

此模型具备以下的意义:

  • 更精准的形容混沌试验场景;
  • 更好的了解混沌试验注入;
  • 不便积淀现有的试验场景;
  • 根据模型挖掘更多的场景;
  • 混沌试验工具更加标准、简洁。

4、试验模型的利用

混沌试验模型的利用可演绎为以下几点:

  • 混沌试验模型使试验场景变量参数化,参数规范化;
  • 可遵循模型实现试验场景畛域化的程度扩大;
  • 可将混沌试验模型和畛域内标准化实现相结合,便捷实现畛域内场景垂直扩大;
  • 下层的畛域场景能够复用遵循混沌试验模型定义的场景;
  • 通过混沌试验模型申明的场景形容能够很好的接入到 ChaosBlade 中;
  • 遵循试验模型能够很不便的构建下层混沌试验平台。

下文重点介绍基于此模型实现的混沌工程工具 ChaosBlade。

混沌工程试验工具:ChaosBlade

阿里巴巴外部从最早引入混沌工程解决微服务的依赖问题,到业务服务、云服务稳态验证,进一步降级到公共云、专有云的业务连续性保障,以及在验证云原生零碎的稳定性等方面积攒了比拟丰盛的场景和实践经验。并且过后混沌工程相干的开源工具存在场景能力扩散、上手难度大、短少试验模型规范,场景难以扩大和积淀等问题。这些问题就会导致很难实现平台化,你很难通过一个平台去囊括这些工具。所以开源混沌工程试验执行工具 chaosblade,上面通过场景介绍、应用形式、架构设计和案例来具体介绍此工具。

1、混沌试验场景

Chaosblade 工具设计初期就思考了易用性和场景扩大的便捷性,不便大家上手应用以及依据各自须要扩大更多的试验场景,遵循混沌试验模型提供了对立的操作简洁的执行工具。混沌试验工具反对 Linux、Windows、Docker、Kubernetes 等零碎平台,笼罩 Java、Golang、NodeJS、C++ 语言利用,共波及 200 多个试验场景,3000 多个试验参数(v1.0.0-GA)。目前蕴含的场景畛域如下:

  • 根底资源:比方 CPU、内存、网络、磁盘、过程、内核等
  • 应用服务:比方数据库、缓存、音讯、JVM 自身、微服务等,还能够指定任意类办法注入各种简单的试验场景;指定任意办法或某行代码注入提早、变量和返回值篡改等试验场景
  • Docker 容器:比方杀容器、容器内 CPU、内存、网络、磁盘、过程等试验场景
  • Kubernetes 平台:比方节点上 CPU、内存、网络、磁盘、过程试验场景,Pod 网络和 Pod 自身试验场景如杀 Pod,容器的试验场景如上述的 Docker 容器试验场景
  • 云资源:比方阿里云 ECS 宕机等试验场景

2、工具应用形式

ChaosBlade 是个间接下载解压就能够应用的工具,不须要装置,而后它反对的调用形式蕴含 CLI 形式,间接执行 blade 命令。

比方这里举的做网络提早的例子,你增加 -h 参数就能够看到十分欠缺的命令提醒,比方我要一个 9520 端口调用做网络丢包,对齐后面的试验模型,咱们就能够看到,它的演练指标是 network,它的 action 是丢包,它的 matcher 就是调用近程的一个服务端口 9520。执行胜利后会返回试验后果,每一个试验场景咱们都会作为一个对象,它会返回一个试验对象的 UID,此 UID 用于后续的试验治理,比方销毁、查问试验都是通过此 UID 来做的。要销毁试验,也就是复原试验,间接执行 blade destroy 命令就能够了。

ChaosBlade 另一种调用形式是 Web 形式,通过执行 server 命令对外裸露 HTTP 服务,那么在下层,你如果本人构建混沌试验平台的话,你间接能够通过 HTTP 申请去调用就能够。

3、工具架构设计

ChaosBlade 根据畛域实现封装成各自独立的我的项目,每个我的项目依据各畛域的最佳实际来实现,不仅能满足各畛域应用习惯,而且还能够通过混沌试验模型来建设与 chaosblade cli 我的项目的关系,方便使用 chaosblade 来对立调用,各畛域下的试验场景根据混沌试验模型生成 yaml 文件形容,裸露给下层混沌试验平台,混沌试验平台依据试验场景形容文件的变更,主动感知试验场景的变动,无需新增场景时再做平台开发,使混沌平台更加专一于混沌工程其余局部。目前蕴含的执行器我的项目如下:

  • chaosblade:混沌试验管理工具,蕴含创立试验、销毁试验、查问试验、试验环境筹备、试验环境撤销等命令,是混沌试验的执行工具,执行形式蕴含 CLI 和 HTTP 两种。提供欠缺的命令、试验场景、场景参数阐明,操作简洁清晰。
  • chaosblade-spec-go: 混沌试验模型 Golang 语言定义,便于应用 Golang 语言实现的场景都基于此标准便捷实现。
  • chaosblade-exec-os: 根底资源试验场景实现,如 CPU、网络、内存、磁盘等。
  • chaosblade-exec-docker: Docker 容器试验场景实现,通过调用 Docker API 标准化实现。
  • chaosblade-operator: Kubernetes 平台试验场景实现,将混沌试验通过 Kubernetes 规范的 CRD 形式定义,很不便的应用 Kubernetes 资源操作的形式来创立、更新、删除试验场景,包含应用 kubectl、client-go 等形式执行,而且还能够应用上述的 chaosblade cli 工具执行。
  • chaosblade-exec-jvm: Java 利用试验场景实现,应用 Java Agent 技术动静挂载,无需任何接入,零老本应用,而且反对卸载,齐全回收 Agent 创立的各种资源。
  • chaosblade-exec-cplus: C++ 利用试验场景实现,应用 GDB 技术实现办法、代码行级别的试验场景注入。

4、工具应用案例

通过一个 Dubbo 微服务案例,来介绍 chaosblade 工具的应用。这个微服务 Demo 分三级调用,consumer 调用 provider,provider 调用 base,同时 provider 还调用 mk-demo 数据库,provider 和 base 服务具备两个实例。

这个案例执行的试验场景是数据库调用提早,咱们先定义监控指标:慢 SQL 数和告警信息,做出冀望假如:慢 SQL 数减少,钉钉群收到慢 SQL 告警。接下来执行试验。咱们间接应用 chaosblade 工具执行,能够看下左下角,咱们对 demo-provider 注入调用 mysql 查问时,若数据库是 demo 且表名是 d_discount,则对 50% 的查问操作提早 600 毫秒。

咱们应用阿里云产品 ARMS 做监控告警。大家能够看到,当执行完混沌试验后,很快钉钉群里就收到了报警。所以咱们比照下之前定义的监控指标,是合乎预期的。但须要留神的是这次合乎预期并不代表当前也合乎,所以须要通过混沌工程持续性的验证。呈现慢 SQL,可通过 ARMS 的链路追踪来排查定位,能够很分明的看出哪条语句执行慢。

混沌工程平台:chaosblade-box

为了让使用者将精力聚焦在通过混沌工程解决零碎高可用问题上,而不是试验工具的抉择、部署上,所以将 ChaosBlade 品牌进行降级,开源 chaosblade-box 混沌工程平台。平台托管支流的混沌试验工具,实现工具自动化的部署,通过对立的操作页面实现混沌工程施行。

上面通过平台的性能特点、架构设计及应用案例来介绍混沌工程平台 chaosblade-box。

1、平台性能特点

具备以下性能特点:

  • 反对开源试验工具托管:平台可托管业界支流的试验工具,如本身的 chaosblade 和内部的 litmuschaos 等。后续也会托管 chaos mesh 试验工具。
  • 具备丰盛的试验场景:蕴含根底资源(CPU、内存、网络、磁盘、过程、内核、文件等)、多语言应用服务(Java、C++、NodeJS、Golang 等)、Kubernetes 平台(笼罩 Container、Pod、Node 资源场景,蕴含上述试验场景)。
  • 试验工具自动化部署:无需手动部署试验工具,实现试验工具在主机或集群上自动化部署。
  • 对立混沌试验用户界面:用户无需关怀不同工具的应用形式,在对立用户界面进行混沌试验。
  • 多维度试验形式:反对从主机到 Kubernetes 资源,再到利用维度进行试验编排。
  • 集成云原生生态:采纳 Helm 部署治理,集成 Prometheus 监控,反对云原生试验工具托管等。

2、平台架构设计

通过控制台页面可实现 chaosblade、litmuschaos 等已托管工具自动化部署,依照社区的建设的混沌试验模型对立试验场景,依据主机、Kubernetes、利用来划分指标资源,通过指标管理器来管制,在试验创立页面,能够实现白屏化的指标资源抉择。平台通过调用混沌试验执行来执行不同工具的试验场景,配合接入 prometheus 监控,能够察看试验 metric 指标,后续会提供丰盛的实验报告。Chaosblade-box 的部署也非常简单,具体能够查看:
https://github.com/chaosblade…

3、应用阐明

装置部署实现后,通过配置 Kubernetes 集群或者主机信息,能够在机器列表页面看到集群或主机数据。抉择试验治理创立试验,演练维度反对主机、Node、Pod、Container 维度,抉择相应的维度后,会呈现对应的资源列表,能够很不便的抉择。演练内容蕴含所托管的所有试验场景。实现试验创立后,主动跳转到演练详情页面,点击执行跳到工作详情页。

演练工作详情页面展现试验的根本信息和试验工作状态,能够很不便的管制试验,以及明确试验工作状态。

将来布局

1、chaosblade

ChaosBlade 将来以云原生为根底,提供面向多集群、多环境、多语言的混沌工程平台和混沌工程试验工具。试验工具持续聚焦在试验场景丰盛度和稳定性方面,反对更多的 Kubernetes 资源场景和标准应用服务试验场景规范,提供多语言试验场景规范实现。

2、chaosblade-box

后续会将阿里云故障演练平台(可信云混沌工程平台先进型认证)外围性能开源,与现有的混沌工程平台进行交融,实现更多能力的凋谢。同时简化混沌工程工具部署施行方面,后续会托管更多的混沌试验工具和兼容支流的平台,实现场景举荐,提供业务、系统监控集成,输入实验报告,在易用的根底上实现混沌工程操作闭环。

作者介绍:

肖长军(花名:穹谷):阿里巴巴技术专家,开源我的项目 ChaosBlade Founder&Maintainer,阿里云故障演练平台端侧负责人,可信云规范专家,混沌工程布道师,多年分布式系统架构和稳定性建设教训。

桑杰:就任于中国农业银行研发核心,从事于财务相干零碎大数据研发工作。

正文完
 0