美文网首页
混沌工程理论

混沌工程理论

作者: renyjenny | 来源:发表于2024-01-28 11:31 被阅读0次

背景

起源

2008年8月,Netflix的服务器因为数据库问题导致宕机了整整3天。此后,Netflix开始将整个Netflix应用从单体架构迁移到AWS上的分布式云架构,以此来消除单点故障,但同时也引入了新的问题。为了建设更加可靠和容错性更强的系统,为此, Netflix 工程师创建了 Chaos Monkey ,会随机终止在生产环境中运行的 EC2 实例。工程师可以快速了解他们正在构建的服务是否健壮,有足够的弹性,可以容忍计划外的故障。至此,混沌工程开始兴起。

image.png
  • 2010年 Netflix 内部开发了 AWS 云上随机终止 EC2 实例的混沌实验工具:Chaos Monkey
  • 2011年 Netflix release了其猴子军团工具集:Simian Army
  • 2012年 Netflix 向社区开源由 Java 构建 Simian Army,其中包括 Chaos Monkey V1 版本
  • 2014年 Netflix 开始正式公开招聘 Chaos Engineer
  • 2014年 Netflix 提出了故障注入测试(FIT),利用微服务架构的特性,控制混沌实验的爆炸半径
  • 2015年 Netflix release了 Chaos Kong ,模拟AWS区域(Region)中断的场景
  • 2015年 Netflix 和社区正式提出混沌工程的指导思想 – Principles of Chaos Engineering
  • 2016年 Kolton Andrus(前 Netflix 和 Amazon Chaos Engineer )创立了 Gremlin ,正式将混沌实验工具商用化
  • 2017年 Netflix 开源 Chaos Monkey 由 Golang 重构的 V2 版本,必须集成 CD 工具 Spinnaker(持续发布平台)来使用
  • 2017年 Netflix release了 ChAP (Chaos Automation Platform, 混沌实验自动平台),可视为应用故障注入测试(FIT)的加强版
  • 2017年 由Netflix 前混沌工程师撰写的新书“混沌工程”在网上出版
  • 2017年 Russell Miles 创立了 ChaosIQ 公司,并开源了 chaostoolkit 混沌实验框架

为什么需要混沌工程

随着公有云市场的高速增长和云原生技术的发展,企业用户逐步向云原生架构迁移,系统内的微服务进一步朝着分布式的架构演进,微服务数量呈爆炸式增长,各服务间相互调用关系也变得更为繁杂,这对软件的可靠性提出了更高的要求,而传统的质量工程和软件测试已无法检测出生产环境中的意外故障和性能问题。为了应对愈发复杂的实际生产问题,混沌工程应运而生,它可以帮助用户提前检测出生产环境中可能潜在的故障和性能问题。

近期重大宕机事故

时间 产品 持续时间 影响范围 故障原因
10月23日 语雀 7小时 系统全面崩溃 系统升级工具bug导致服务器下线
11月12日 阿里云 2.5小时 全球所有区域服务异常 底层认证/鉴权服务异常
11月27日 阿里云 2小时 部分地域控制台访问异常 数据库管控异常
11月27日 滴滴 12小时 系统全面崩溃 底层系统软件故障

混沌工程是什么

混沌工程是一套通过在系统基础设施上进行实验,主动找出系统中脆弱环节的方法学。通过实验性的方法,发现系统中潜在的、可以导致灾难性故障、或让用户受损的薄弱环节,并推动研发自主地进行问题修复、代码优化,最终建设成为真正意义上的韧性架构,增加用户抵御突发事件的能力与信心。

混沌工程与传统测试

类型 混沌工程 传统测试
目标 发现系统的未知问题 验证软件是否按照预期进行工作
方法 通过故障演练进行实验 手工、自动化
范围 从基础设施到软件本身 软件本身
结果 得到结果后再评估能否接受 有明确的是否通过的标准

总的来说,传统测试是对预期结果进行验证****,混沌测试是****对未知结果进行探索。

混沌工程实施

实施先决条件

  • 系统具备一定的弹性来应对破坏性演练中的一些异常事件——混沌工程非常适合揭露生产系统中的未知缺陷,但如果确定混沌工程实验会导致系统出现严重的问题,那么运行这样的实验是没有任何意义的
  • 具备一套破坏性演练的环境——理想实践是直接在生产环境中进行实验,其次是在离生产环境越近的地方进行实验(如预发环境)。如在预发环境进行演练,确保预发和生产环境保持一致很重要,只有这样才能体现演练意义
  • 具备配套的监控系统——用于判断系统当前的各项状态如果没有对系统行为的可见能力,那么也就无法从实验中得出有效的结论

混沌工程应用原则

netflix对于混沌工程的实施提出以下5个原则:

建立一个围绕稳定状态行为的假说

“稳定状态”是指系统正常运行时的状态。具体来说,系统的稳定状态可以通过一些指标来定义,当系统指标在测试完成后,无法快速恢复稳态要求,可以认为这个系统是不稳定的。
定义好指标并理解其稳定状态的行为之后,****我们****可以使用它们来建立对实验的假设。思考****当****向系统注入不同类型的事件时,稳定状态行为会发生什么变化。
我们的假设可以是实验措施不会使系统行为偏离稳定状态,比如:向我们的系统中注入的事件不会导致系统稳定状态发生明显的变化。

多样化真实世界的事件

在真实的世界中,我们可能遇到各种各样的问题,任何能够破坏稳态的事件都是混沌实验中的一个潜在变量。例如:

•硬件故障;

•云服务功能不可用(例如AWS某个区域不可用);

•系统本身的功能缺陷(例如功能未实现或者实现错误);

•网络延迟或隔离(例如微服务之间延迟过大);

•依赖故障(例如所依赖的第三方服务不可用)。

无穷无尽的系统事件、触发条件、未知的问题等着我们去探索,但我们无法穷尽这些问题,所以我们在决定开始混沌工程实验之前,需要划定实验的范围,之后根据划定的范围和业务场景,最终决定要引入哪些事件或注入哪些错误,并且对这些影响作出大略的估算,如这些事件在系统中发生的频率与影响范围,最后考虑这些引入的影响需要耗费的成本以及实验的复杂度。

在生产环境中运行实验

根据环境与流量模式的不同,系统运行效果亦将受到影响。由于运行效果可能随时改变,因此我们应将对实际流量进行采样作为获取可靠请求路径的惟一方法。为了保证系统运行方式的真实性以及同现有部署系统间的关联性,混沌工程原则强烈建议您直接面向生产流量进行实验。

即便不能在生产环境中执行实验,也要尽可能的在离生产环境最接近的环境中运行。越接近生产环境,对实验外部有效性的威胁就越少,对实验结果的信心就越足。

持续自动化运行实验

现在系统越来越复杂,这意味着我们无法预先地知道生产环境的哪些变动会改变混沌工程实验的结果。基于这个原因,我们必须假设所有变动都会改变实验结果。在共享状态、缓存、动态配置管理、持续交付、自动伸缩、时间敏感的代码等等的作用之下,生产环境实际上处在一个无时不在变化的状态。

最开始执行混沌实验,可能就是手动执行,但是实验的手动运行工作属于劳动力密集型任务,因此难以长久持续。相反的,我们应该自己投入精力来开发混沌工程的工具和平台,以期不断降低创建新实验的门槛,并能够完全自动运行这些实验。

最小化爆炸半径

在生产进行混沌试验的时候,一定要注意影响的范围,如果影响太大会造成不必要客户投诉。要确保实验能随时终止,环境能在很短的时间内恢复,我们需要通过了解业务和技术架构来探索故障造成的未知影响,以及影响的范围与功能,并将影响控制在我们能够处理的范畴,这个范畴我们称之为最小化“爆炸半径”。

场景设计

实验是混沌工程的基础,大多依靠模拟异常注入系统来实现。在设计场景时,首先要分析系统的架构,把技术架构中的组件全部列出来,并分析可能产生异常的点,再列出异常场景,根据分析的异常点来设计对应的场景。异常点通常参考每一层的影响点,也可以根据混沌测试工具提供的异常实验。

image.png

实施步骤

完整的混沌工程实验是一个持续性迭代的闭环体系,大致分为以下几个步骤:

  1. 确定初步的实验需求和实验对象;

  2. 通过实验可行性评估,确定实验范围;

  3. 设计合适的观测指标;

  4. 设计合适的实验场景和环境;

  5. 选择合适的实验工具和平台框架;

  6. 建立实验计划,和实验对象的干系人充分沟通,进而联合执行实验过程;

  7. 搜集预先设计好的实验指标;

  8. 待实验完成后,清理和恢复实验环境;

  9. 对实验结果进行分析;

  10. 追踪根源并解决问题;

  11. 将以上实验场景自动化,并入流水线,定期执行;之后,便可开始增加新的实验范围,持续迭代和有序改进。

image.png

故障演练工具

chaosblade.png

ChaosBlade是一个云原生混沌工程平台,支持多种环境、集群和语言。

包含混沌工程实验工具 chaosblade 和混沌工程平台 chaosblade-box,旨在通过混沌工程帮助企业解决云原生过程中高可用问题。

chaosmesh.png

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

扩展阅读

https://chaos-mesh.org/zh/
https://chaosblade.io/docs/
https://cloud.tencent.com/developer/article/1622874
https://www.infoq.cn/article/gsqtykoa3uvrtqi1kkmo

相关文章

  • 混沌工程-阿里周洋肖长军以及Thoughtworks伍斌的实践

    云原生架构下的混沌工程实践,讲述了什么是混沌工程,混沌工程的5项原则。为什么要引入混沌工程?介绍了混沌工程开源工具...

  • 前端组件 混沌

    什么是混沌 混沌即混沌工程,首先我们得知道混沌工程是什么。 混沌工程起源于Netflix公司,Netflix公司的...

  • 混沌理论

    混沌理论的主导思想是,宇宙本身处于混沌状态,在其中某一部分中似乎并无关联的事件间的随机冲突,会给宇宙的造成一部分不...

  • 混沌理论

    https://www.oreilly.com/library/view/chaos-engineering/97...

  • 混沌工程

    混沌工程的原则 混沌工程通过运行经过仔细计划的试验来了解系统在发生故障时的行为,一般分为三个步骤: 先是假设系统在...

  • 混沌工程

    混沌工程是什么 背景 随着服务化、微服务和持续集成的普及,软件研发效率和敏捷性得到了极大提升,但大规模服务节点和复...

  • 混沌工程

    混沌工程是近十年出现的,然而我们大部分人包括我自己都没有接触或者听说过,对我自己小白做个知识普及。 混沌工程定义 ...

  • 混沌工程

    定义 混沌工程是一种可试验的、基于系统的方法来处理大规模分布式系统中的混乱问题。通过不断试验,了解系统的实际能承受...

  • 生涯混沌理论

    昨天听了家琪老师的生涯混沌理论课程的分享,通过文娟老师的复盘最大的收获如下: 1、蝴蝶效应:善于震动翅膀,会带来意...

  • 混沌工程简介

    最近看到 Netflix 的混沌工程的介绍,感触颇深。在 TiDB 里面,我们为了保证系统的健壮性,也做了很多工作...

网友评论

      本文标题:混沌工程理论

      本文链接:https://www.haomeiwen.com/subject/tpewodtx.html