Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【DevOps】什么是混沌工程?

【DevOps】什么是混沌工程?

作者头像
架构师研究会
发布于 2022-09-30 03:29:36
发布于 2022-09-30 03:29:36
8.1K0
举报
文章被收录于专栏:超级架构师超级架构师

测试您可以预测的事故是必不可少的。但是随着数字化转型和云原生架构带来的复杂性,团队需要一种方法来确保应用程序能够承受生产的“混乱”。混沌工程满足了这一需求,因此组织可以提供在任何条件下都可以正常运行的强大、有弹性的云原生应用程序。

什么是混沌工程?

混沌工程是一种测试分布式软件的方法,它故意引入故障和错误场景,以验证其在面对随机中断时的弹性。这些中断可能导致应用程序以不可预测的方式做出响应,并可能在压力下崩溃。混沌工程师问为什么。

从业者将软件置于受控的模拟危机中,以测试不稳定的行为。危机可能是技术、自然或恶意事件,例如影响数据中心可用性的地震或感染应用程序和网站的网络攻击。随着软件性能下降或失败,混沌工程师的发现使开发人员能够在代码中添加弹性,因此应用程序在紧急情况下保持完好。

随着混沌工程师对他们的测试越来越有信心,他们改变了更多的变量并扩大了灾难的范围。许多灾难场景和结果使混沌工程师能够更好地模拟应用程序和微服务发生的情况,这使他们能够与开发人员共享越来越多的智能,以完善软件和云原生基础设施。

混沌工程的历史

Netflix 出于需要开创了混沌工程。2009 年,在线视频供应商迁移到 AWS 云基础设施,为越来越多的观众提供娱乐。但是云带来了新的复杂性,例如不断增加的连接和依赖关系。与娱乐公司在其数据中心看到的负载平衡问题相比,它产生了更多的不确定性。如果云中的任何接触点出现故障,观众体验的质量可能会下降。因此,该组织寻求降低复杂性并提高生产质量。

2010 年,Netflix 推出了一项技术,可以随机关闭生产软件实例——比如在服务器机房里放一只猴子——以测试云如何处理其服务。于是,工具混沌猴诞生了。

混沌工程在 Netflix 等组织中变得成熟,并催生了 Gremlin (2016) 等技术,变得更有针对性和知识化。这门科学催生了专业的混沌工程师,他们致力于破坏云软件和与之交互的本地系统,以使其具有弹性。现在,混沌工程是一个成熟的职业,它会挑起托管的麻烦来稳定云软件。

混沌工程是如何工作的?

混沌工程从了解软件的预期行为开始。

  • 假设。工程师问自己,如果他们改变一个变量会发生什么。如果他们随机终止服务,他们假设服务将继续不间断。问题和假设形成假设(The question and the assumption form a hypothesis)。
  • 测试。为了检验这个假设,混沌工程师将模拟的不确定性与负载测试相结合,并观察交付应用程序的服务、基础设施、网络和设备的动荡迹象。堆栈中的任何故障都会破坏假设。
  • 爆炸半径。通过隔离和研究故障,工程师可以了解在不稳定的云条件下会发生什么。测试造成的任何损坏或影响都称为“爆炸半径”。混沌工程师可以通过控制测试来管理爆炸半径。
  • 见解。这些发现形成了对软件开发和交付过程的输入,因此新软件和微服务将更好地应对不可预见的事件。

为了减轻对生产环境的破坏,混沌工程师从非生产环境开始,然后以可控的方式慢慢扩展到生产环境。一旦建立,混沌工程就成为微调服务水平指标和目标、改进警报和构建更高效仪表板的有效方法,因此您知道您正在收集准确观察和分析环境所需的所有数据。

谁使用混沌工程?

混沌工程通常起源于 DevOps 中的小团队,通常涉及在预生产和生产环境中运行的应用程序。因为它可以触及许多系统,混沌工程可以产生广泛的影响,影响整个组织的群体和利益相关者。

跨越硬件、网络和云基础设施的中断可能需要网络和基础设施架构师、风险专家、安全团队甚至采购官员的投入和参与。这是好事。测试的范围越大,混沌工程就越有用。

尽管一个小团队通常拥有和管理混沌工程工作,但这是一种通常需要来自村庄的投入并为村庄提供利益的做法。

混沌测试的好处

您可以通过测试应用程序的限制获得的洞察力为您的开发团队和您的整体业务带来很多好处。这只是健康、管理良好的混沌工程实践的一些好处。

  • 提高弹性和可靠性。混沌测试丰富了组织关于软件在压力下如何执行以及如何使其更具弹性的情报。
  • 加速创新。来自混沌测试的情报返回给开发人员,他们可以实施设计更改,使软件更耐用并提高生产质量。
  • 推进协作。开发人员并不是唯一看到优势的群体。混沌工程师从他们的实验中收集到的见解提升了技术团队的专业知识,从而缩短了响应时间和更好的协作。
  • 加快事件响应速度。通过了解可能出现的故障情况,这些团队可以加快故障排除、维修和事件响应速度。
  • 提高客户满意度。更高的弹性和更快的响应时间意味着更少的停机时间。来自开发和 SRE 团队的更大创新和协作意味着更好的软件能够以高效和高性能快速满足新客户的需求。
  • 提升业务成果。混沌测试还可以通过更快的价值实现时间、节省时间、金钱和资源以及产生更好的底线来扩展组织的竞争优势。

组织的软件越有弹性,消费者和企业客户就越能享受其服务而不会分心或失望。

混沌工程的挑战和陷阱

尽管混沌测试的好处是显而易见的,但它是一种应该慎重进行的实践。以下是最关心的问题和挑战。

  • 不必要的损坏。混沌测试的主要问题是可能造成不必要的损坏。混沌工程可能导致超出合理测试允许的实际损失。为了限制发现应用程序漏洞的成本,组织应避免超出指定爆炸范围的测试。目标是控制爆炸半径,以便您可以查明故障原因,而无需引入新的故障点。
  • 缺乏可观察性。建立这种控制说起来容易做起来难。缺乏对爆炸半径可能影响的所有系统的端到端可观察性和监控是一个常见问题。如果没有全面的可观察性,可能很难理解关键依赖关系与非关键依赖关系,或者很难有足够的上下文来理解故障或降级的真正业务影响,以便确定修复的优先级。缺乏可见性还可能使团队难以确定问题的确切根本原因,这会使补救计划复杂化。
  • 不清楚启动系统状态。另一个问题是在测试运行之前清楚地了解系统的启动状态。如果没有这种清晰度,团队可能难以理解测试的真实效果。这会降低混沌测试的有效性,并使下游系统面临更大的风险,并使控制爆炸半径变得更加困难。

如何开始混沌工程

与任何科学实验一样,开始使用混沌工程需要一些准备、组织以及监控和测量结果的能力。

  • 了解您的环境的起始状态。要计划一个控制良好的混沌测试,您应该了解您的环境的应用程序、微服务和架构设计,以便您能够识别测试的效果。拥有一个可以与最终状态进行比较的基线可以创建一个蓝图,用于在测试期间进行监控并在之后分析结果。
  • 询问可能出现的问题并建立假设。清楚了解系统的启动状态后,询问可能出现的问题。清楚了解系统的启动状态后,询问可能出现的问题。了解服务水平指标和服务水平目标,并将它们用作建立系统应如何在压力下工作的假设的基础。
  • 一次引入一个变量。为了控制爆炸半径,一次只引入一点混乱,这样你就可以欣赏结果。准备好在特定条件下中止实验,以免对生产软件造成伤害,并且如果出现问题,也要有回滚计划。在测试期间,尝试反驳假设以发现需要关注的领域以提高系统弹性。
  • 监测并记录结果。监控实验以记录应用程序行为中的任何细微差别。分析结果以查看应用程序如何响应以及测试是否达到了团队的期望。使用调查工具来了解减速和故障的确切根本原因。

控制混乱

像 Gremlin 这样的解决方案提供了关键的管理工具来计划和执行混沌工程实验。它使实验具有可重复性和可扩展性,因此团队可以将它们应用于相同或更大堆栈的未来实验。

Dynatrace 的自动和智能可观察性提供了对混沌测试效果的洞察,因此工程师可以谨慎地进行混沌实验。为了监控爆炸半径,Dynatrace 观察了正在进行混沌实验的系统。通过对整个软件堆栈的可见性,Dynatrace 提供了关键的上下文分析,以隔离混沌测试暴露的故障的根本原因。

Dynatrace 的有效监控为进行混沌测试的工程师提供了必不可少的全景镜头,帮助他们了解依赖关系并预测中断将如何影响整个系统。如果混乱超出预期,Dynatrace 的洞察力可帮助团队快速修复对应用程序功能的任何实际损害。

组织可以在数字化转型的任何阶段实现应用程序弹性,而混沌工程是一个很好的工具。然而,在玩火之前,至关重要的是要采取正确的措施来预测和应对这种方法可能带来的大量故障情况。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 首席架构师智库 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python全网最全基础课程笔记(九)——集合,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
综上所述,Python的集合是一种功能强大且灵活的数据结构,特别适用于需要去除重复元素或进行集合运算的场景。
小白的大数据之旅
2024/11/20
1040
Python全网最全基础课程笔记(九)——集合,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python字典-集合
字典 #1. 基础操作 name = {'zhang':'10', 'li':'5'} dict(name) #将列表等转换为字典 name['zhang'] #查询 name['zhang'] = 15 #赋值 del name['zhang'] #删除键值 name = { #可多行写法 'zhang': '10', 'li': '5' } #2. 遍历 for key,value in name.items(): print(key + value) #3. 其它操作 name.keys()
陈不成i
2021/06/21
2590
19-3-7Python中小数据池、数据类型的补充、set集合
同一个代码块:同一代码块的缓存机制,驻留机制的目的:1. 节省内存空间,2提高性能
GhostCN_Z
2020/04/03
6010
Python基础语法-基本数据类型-集合的运算
使用 symmetric_difference() 或者 ^ 运算符来求两个集合的对称差集。对称差集指的是两个集合中不重复的元素的集合。例如:
玖叁叁
2023/04/16
3000
Python11 集合
使用discard删除,与remove不同的是,如果删除的元素不存在,discard不会报错。
py3study
2020/01/08
3410
Python11 集合
Python 的集合关系和运算
数学上,集合之间有“子集”、“超集”的关系和“交、差、并”等运算,在 Python 中也提供了完成集合运算的方法,在程序中恰当使用,可以优化程序。
老齐
2021/07/05
2K0
Python教程(12)——Python数据结构集合set介绍
集合是一种无序、可变的数据结构,它也是一种变量类型,集合用于存储唯一的元素。集合中的元素不能重复,并且没有固定的顺序。在Python 提供了内置的 set 类型来表示集合,所以关键字set就是集合的意思。
一点sir
2023/09/03
2880
入门 | 一文带你了解Python集合与基本的集合运算
了解 Python 集合: 它们是什么,如何创建它们,何时使用它们,什么是内置函数,以及它们与集合论操作的关系
机器之心
2018/07/26
1.5K0
入门 | 一文带你了解Python集合与基本的集合运算
Python从0到100(十):Python集合介绍及运用
定义: 由不同元素组成的集合,集合是一组无序排列 可hash值,可作为字典的key。
是Dream呀
2024/04/23
1270
Python: set集合方法介绍
文章背景: 集合(set)是Python中的一个数据类型。在集合中,每个元素都是唯一的(没有重复项),并且必须是不可变的(不能更改)。下面就来介绍set的内置方法。
Exploring
2022/09/20
3790
Python语法之集合
集合是无序元素的集合,集合中的元素不可重复,并且创建完成后,其中的元素不可更改。但是整个集合是可以更改的,我们可以向其增加元素,也可以从中删除元素。也就是说,我们无法修改集合中的元素,但是我们可以对整个集合进行添加或者是删除等更改的操作。
芯动大师
2022/11/15
1860
Python语法之集合
Python内置数据结构之集合
今天给大家介绍内置数据结构集合的用法。 看一下集合的思维导图: 集合的特点 元素是唯一的 元素是无序的,不是线性结构 集合元素是可hash的 聚合的含义和数学上的含义相同 集合的操作 增:add,up
1846122963
2018/03/09
1K0
Python内置数据结构之集合
Python数据类型详解-集合#学习猿地
+ 功能:成员检测、从序列中去除重复项以及数学中的集合类计算,例如交集、并集、差集与对称差集等等。
学习猿地
2020/03/17
4200
Python “集合” 100道实战题目练习,巩固知识、检查技术
题目9:以下哪个表达式的结果是一个集合? A. {1, 2, 3} + {3, 4, 5} B. {1, 2, 3} & {3, 4, 5} C. {1, 2, 3} * 2 D. {1, 2, 3} - {3, 4, 5}
小白的大数据之旅
2024/11/20
1440
python set大小_python set集合
s7= {[1],(1,),1} #set的元素要求必须可以hash 列表不能hash
用户7886150
2021/01/26
1.7K0
Python 编程 与集合相关的主要操作和计算
在 Python 编程语言中,集合(set)是一种无序且不存在重复元素的数据结构,可以执行多种操作和计算。以下是与集合相关的主要操作和计算:
叶庭云
2024/05/24
830
【深度学习】 Python 和 NumPy 系列教程(五):Python容器:3、集合Set详解(初始化、访问元素、常用操作、常用函数)
Python本身是一种伟大的通用编程语言,在一些流行的库(numpy,scipy,matplotlib)的帮助下,成为了科学计算的强大环境。本系列将介绍Python编程语言和使用Python进行科学计算的方法,主要包含以下内容:
Qomolangma
2024/07/29
990
【深度学习】 Python 和 NumPy 系列教程(五):Python容器:3、集合Set详解(初始化、访问元素、常用操作、常用函数)
【七】Python基础之数据结构:集合
集合之间也可进行数学集合运算(例如:并集、交集等),可用相应的操作符或方法来实现。
菲宇
2019/06/13
4230
[195]python set()和frozenset()函数
set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
周小董
2022/04/12
4230
Python中的集合介绍
可能看上面的文字有点抽象,什么这个集合那个集合的,接下来我们直接上案例,相信大家看了之后一目了然:
小博测试成长之路
2023/09/01
1880
Python中的集合介绍
推荐阅读
相关推荐
Python全网最全基础课程笔记(九)——集合,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档