混沌工程

作者:碳水怪兽👾 发布于:2022/2/20

前言

本篇文章参考了《混沌工程:Netflix系统稳定性之道》和一些官方文档,旨在对混沌工程进行了解并进行一定程度的实践。

混沌工程の理论

什么是混沌工程

由于应用架构解耦以及海量的用户和数据规模,应用系统和基础设施也朝向分布式的方向演进,应用系统的复杂度近一步提高,同时由于分布式系统之间的相互依赖,单个服务出现了异常,难免会导致整个系统出现无法预期的异常行为,尽管我们引入了各种测试、金丝雀发布,蓝绿部署等手段,希望可以防范于未然,但随着服务规模不断增长,服务之间依赖所带来的不确定性也呈指数级增长,在这样的服务调用网中,任何一环出现异常都可以产生蝴蝶效应一样的影响,在这样的背景下,我们难以建立对分布式系统可以在生产中稳定运行的信心,而混沌工程的目的正在于此。 为了应对软件系统复杂度的激增所带来的不确定性,Netlifx带来了一种新的思维方式-主动出击并且通过实践产生了一套实验方法,也就是混沌工程。 混沌工程是在分布式系统上进行实验的学科,目的是建立对系统抵御生产环境中失控条件的能力和信心

混沌工程的思想

混沌工程的理论构建于塔勒布的《反脆弱》一书中,旨在系统如何在不确定性中受益,在接受“系统越复杂、越脆弱”的事实的基础上,让系统在失败中不断受益并进化,这便是混沌工程的核心思想。在实践中,通过一系列的实验来验证系统在各种故障场景下的表现,通过频繁的实验,增强系统的反脆弱性,同时增加开发者的信心。

为什么需要混沌工程

  • 对于架构师来说,可以验证系统架构的容错能力,比如验证现在提倡的面向失败设计的系统;
  • 对于开发和运维,可以提高故障的应急效率,实现故障告警、定位、恢复的有效和高效性。
  • 对于测试来说,可以弥补传统测试方法留下的空白,之前的测试方法基本上是从用户的角度去做,而混沌工程是从系统的角度进行测试,降低故障复发率。
  • 对于产品和设计,通过混沌事件查看产品的表现,提升客户使用体验。所以说混沌工程面向的不仅仅是开发、测试,拥有最好的客户体验是每个人的目标 所以实施混沌工程,可以提早发现生产环境上的问题,并且可以以战养战,提升故障应急效率和可以使用体验,逐渐建设高可用的韧性系统。

混沌工程实施的前提条件

  • 系统已经有一定的弹性来应对异常事件
  • 配套的监控系统,可以在混沌工程的实验的过程中提供“可观察性”的结果

混沌工程的具体流程

  • 1.选定假设
  • 2.设定实验范围
  • 3.识别出要监控的指标
  • 4.在组织内沟通到位
  • 5.执行实验
  • 6.分析实验结果
  • 7.扩大实验范围

混沌工程的推动

  • 1.前期可以选择历史故障进行复现,确保故障改进的有效性
  • 2.中期可以通过混沌工程发验证故障发现能力和监控的完备程度
  • 3.后期随着混沌工程经验的丰富,可以引入一些复杂的度量指标比如故障的"发现-定位-恢复"时长来来考验团队
  • 4.形成混沌工程的文化并在不同的团队推广

混沌工程の的实践

混沌工程的工具

接下来介绍一下国内的2款混沌工程的工具

ChaosBlade
ChaosBlade介绍

Chaos是阿里2019年开源的混沌工程项目,包含混沌工程实验工具chaosblade和混沌工程平台chaosblade-box,旨在通过混沌工程帮助企业解决云原生过程中高可用问题。

ChaosBlade特性
  • 丰富的实验场景:包含基础资源(CPU、内存、网络、磁盘、进程,文件),多种语言的应用(Java、C++、NodeJS等)、K8S平台
  • 便捷的场景扩展能力:所有的实验场景遵循混沌实验模型实现,并且不同层次场景对应不同的执行器,实现简单,易于扩展。
  • 实验工具自动化部署:无需手动部署实验工具,实现实验工具在主机或集群上自动化部署。
  • 多维度实验方式:支持从主机到 Kubernetes 资源,再到应用维度进行实验编排。
  • 集成云原生生态:采用 Helm 部署管理,集成 Prometheus 监控,支持云原生实验工具托管等。
ChaosBlade场景图

ChaosBlade场景图

ChaosBlade实践
  • docker镜像下载 docker pull chaosbladeio/chaosblade-demo

  • 启动镜像 docker run -it --privileged chaosbladeio/chaosblade-demo

  • 阅读容器里面的README文件 容器里面是一个简单的dubbo应用demo,可以通过blade设置dubbo调用延时来注入故障

Chaos Mesh
Chaos Mesh简介

Chaos Mesh 是一个开源的云原生混沌工程平台,提供丰富的故障模拟类型,具有强大的故障场景编排能力,方便用户在开发测试中以及生产环境中模拟现实世界中可能出现的各类异常,帮助用户发现系统潜在的问题。Chaos Mesh 提供完善的可视化操作,旨在降低用户进行混沌工程的门槛。用户可以方便地在 Web UI 界面上设计自己的混沌场景,以及监控混沌实验的运行状态。

Chaos Mesh特性
  • 核心能力稳固:Chaos Mesh 起源于 TiDB 的核心测试平台,发布初期即继承了大量 TiDB 已有的测试经验。
  • 被充分验证:Chaos Mesh 被众多公司以及组织所使用,例如腾讯和美团等;同时被用于众多知名分布式系统的测试体系中,例如 Apache APISIX 和 RabbitMQ 等。
  • 系统易用性强:图形化操作和基于 Kubernetes 的使用方式,充分利用了自动化能力。
  • 云原生:Chaos Mesh 原生支持 Kubernetes 环境,提供了强悍的自动化能力。
  • 丰富的故障模拟场景:Chaos Mesh 几乎涵盖了分布式测试体系中基础故障模拟的绝大多数场景。
  • 灵活的实验编排能力:用户可以通过平台设计自己的混沌实验场景,场景可包含多个混沌实验编排,以及应用状态检查等。
  • 活跃的社区:Chaos Mesh 为全球知名开源混沌测试平台,CNCF 开源基金会沙箱项目。
Chaos Mesh实践

由于本地没有k8s或k3s集群,暂时无法做实践demo

其他相关资源

  • 混沌工程精选 混沌工程精选社区精选了国内混沌工程的实践案例、知识文章和出版书籍

预览

  • 微信公众号:混沌工程实践

引用