点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

来源 | https://github.com/wizardbyron/principlesofchaos_zh-cn/

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

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

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

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

  • 当服务不可用时的不正确回滚设置;

  • 不当的超时设置导致的重试风暴;

  • 由于下游依赖的流量过载导致的服务中断;

  • 单点故障时的级联失败等。

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

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

混沌工程实践

为了具体地解决分布式系统在规模上的不确定性,可以把混沌工程看作是为了揭示系统弱点而进行的实验。这些实验遵循四个步骤:

  1. 首先,用系统在正常行为下的一些可测量的输出来定义“稳定状态”。

  2. 其次,假设这个在控制组和实验组都会继续保持稳定状态。

  3. 然后,在实验组中引入反映真实世界事件的变量,如服务器崩溃、硬盘故障、网络连接断开等。

  4. 最后,通过控制组和实验组之间的状态差异来反驳稳定状态的假说。

破坏稳态的难度越大,我们对系统行为的信心就越强。如果发现了一个弱点,那么我们就有了一个改进目标。避免在系统规模化之后被放大。

高级原则

以下原则描述了应用混沌工程的理想方式,这些原则基于上述实验过程。对这些原则的匹配程度能够增强我们在大规模分布式系统的信心。

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

要关注系统的可测量输出, 而不是系统的属性。对这些输出在短时间内的度量构成了系统稳定状态的一个代理。整个系统的吞吐量、错误率、延迟百分点等都可能是表示稳态行为的指标。通过在实验中的系统性行为模式上的关注, 混沌工程验证了系统是否正常工作, 而不是试图验证它是如何工作的。

多样化真实世界的事件

混沌变量反映了现实世界中的事件。我们可以通过潜在影响或估计频率排定这些事件的优先级。考虑与硬件故障类似的事件, 如服务器宕机、软件故障 (如错误响应) 和非故障事件 (如流量激增或伸缩事件)。任何能够破坏稳态的事件都是混沌实验中的一个潜在变量。

在生产环境中运行实验

系统的行为会依据环境和流量模式都会有所不同。由于资源使用率变化的随时可能发生, 因此通过采集实际流量是捕获请求路径的唯一可靠方法。为了保证系统执行方式的真实性与当前部署系统的相关性, 混沌工程强烈推荐直接采用生产环境流量进行实验。

持续自动化运行实验

手动运行实验是劳动密集型的, 最终是不可持续的。所以我们要把实验自动化并持续运行,混沌工程要在系统中构建自动化的编排和分析。

最小化爆炸半径

在生产中进行试验可能会造成不必要的客户投诉。虽然对一些短期负面影响必须有一个补偿, 但混沌工程师的责任和义务是确保这些后续影响最小化且被考虑到。

混沌工程是一个强大的实践, 它已经在世界上一些规模最大的业务系统上改变了软件是如何设计和工程化的。相较于其他方法解决了速度和灵活性, 混沌工程专门处理这些分布式系统中的系统不确定性。混沌工程的原则为我们大规模的创新和给予客户他们应得的高质量的体验提供了信心。

最后推荐一本关于混沌工程不错的书籍:

关注我,回复“加群”加入微信讨论群

  • 安利 10 个 Intellij IDEA 实用插件

  • 有了这 4 款工具,老板再也不怕我写烂SQL了

  • YAML中多行字符串的配置方法总结

  • 一篇漫画带你了解 Linux 内核长啥样!

  • JDK/Java 14 正式发布!然而我还在用 Java 8...

扫一扫,关注我

一起学习,一起进步

朕已阅 

抵御故障引发系统性失控的基本原则:混沌工程相关推荐

  1. 鲜为人知的混沌工程,到底哪里好?

    混沌工程属于一门新兴的技术学科,行业认知和实践积累比较少,大多数IT团队对它的理解还没有上升到一个领域概念.阿里电商域在2010年左右开始尝试故障注入测试的工作,希望解决微服务架构带来的强弱依赖问题. ...

  2. 从甲方到乙方,如何做好混沌工程的行业化落地

    作者:穹谷|阿里云技术专家,ChaosBlade 社区以及商业化产品的 Founder 和 Maintainer ,乐于参与混沌工程布道. 2021 年 12 月 7 日,由信通院主办.混沌工程实验室 ...

  3. ChaosBlade 在工商银行混沌工程体系中的应用实践

    作者 | 吴冕冠 来源|阿里巴巴云原生公众号 互联网金融时代下,金融产品和服务模式不断创新,交易量大幅攀升.面对互联网金融的全新发展态势,传统的单体 IT 架构暴露出很多不适应的地方,为此业界广泛应用 ...

  4. java工商银行项目_ChaosBlade 在工商银行混沌工程体系中的应用实践

    作者 | 吴冕冠 来源|阿里巴巴云原生公众号 互联网金融时代下,金融产品和服务模式不断创新,交易量大幅攀升.面对互联网金融的全新发展态势,传统的单体 IT 架构暴露出很多不适应的地方,为此业界广泛应用 ...

  5. 在 Kubernetes 实施混沌工程—— Chaos Mesh® 原理分析与控制面开发

    Chaos Mesh® 是由 TiDB 背后的 PingCAP 公司开发,运行在 Kubernetes 上的混沌工程(Chaos Engineering)系统.简而言之,Chaos Mesh® 通过运 ...

  6. 深度解读 Chaos Mesh®,探索云原生混沌工程的奥秘

    本篇文章整理自我司研发工程师杨可奥以及 PingCAP 工程效率负责人.Chaos Mesh 负责人周强在 GoCN 开源说上的演讲实录. 本文首先介绍了对混沌工程这一概念的描述,分享了混沌工程的动机 ...

  7. 浩鲸科技基于ChaosBlade的混沌工程实践

    简介:浩鲸科技在海量互联网服务以及当前爆炸式增长的流量场景实践过程中,沉淀出了包括,链路压测,流控管理,动态扩缩容,故障演练等高可用核心技术,并通过云上服务化.平台化和工具化的形式,帮助内部产品研发部 ...

  8. ChaosBlade:从混沌工程实验工具到混沌工程平台

    简介:ChaosBlade 是阿里巴巴 2019 年开源的混沌工程项目,已加入到 CNCF Sandbox 中.起初包含面向多环境.多语言的混沌工程实验工具 chaosblade,到现在发展到面向多集 ...

  9. 云原生背景下故障演练体系建设的思考与实践—云原生混沌工程系列之指南篇

    ​作者:​智妍(郑妍).​浣碧(何颖)​ 什么是混沌工程,云原生大潮下的混沌工程特点 通过使用云计算厂商如阿里云.AWS 等提供的服务,现代服务提供者得以用更低廉的成本,更稳定地进行丰富的软件服务提供 ...

最新文章

  1. “地理智慧 链接未来”,2020 GIS 软件技术大会主题大会召开
  2. C# 设计开发模式 -观察者模式
  3. 红盟过客提到的 CCIE 必读书籍
  4. 利用pyBoard的实验来讨论部分MicroPython特性
  5. python3 中print 显示不全问题
  6. 树莓派kail linux安装wine,在ubuntu14.04中安装wine
  7. nacos 持久化 mysql(windows/linux环境)
  8. 采用光线跟踪绘制场景 c++_光线追踪的相干性聚集:硬件光线追踪的优势
  9. 一篇文章带你快速入门JavaScript(实操代码)
  10. 模版 ----- DP
  11. 如何免费下载百度文库文章
  12. 500MHz频率源设计(西电通院高频大作业)
  13. html 手机底部广告,手机网站被UC浏览器强制嵌入推荐广告解决方案
  14. 【错误解决】System.NotSupportedException:“LINQ to Entities does not recognize the method
  15. c语言程序设计知到网课答案,C语言程序设计(山东联盟)2020知到网课答案
  16. CentOS7 安装 TomCat 7
  17. 通信原理基础知识问答梳理(史上最全)
  18. 将ADS(Advanced Design system)中的版图导入到AD(Altium Designer)中编辑
  19. 硬盘知识大全(含主板、BIOS)
  20. 甘肃非税收缴实现“一网通办”:随时随地扫码“搞定”

热门文章

  1. cmake 静态编译 简介
  2. couchdb 任意命令执行漏洞(cve-2017-12636)
  3. python3 下划线的5中含义
  4. easyui 常用按钮图标
  5. linux c 获取 CPU、内存、IO、磁盘、网速
  6. 使用OpenVas漏扫
  7. linux下Yum的$releasever和$basearch的取值
  8. java 服务器操作系统_java获得当前服务器的操作系统是什么?怎么获得
  9. Problem 58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc?
  10. Linux监听请求到达时间,4: zabbix5.0自动发现网站域名并监控访问状态和请求时间...