【混沌工程】混沌工程原理

简介: 混沌工程是在系统上进行实验的学科,目的是建立对系统承受生产中动荡条件的能力的信心。大规模分布式软件系统的进步正在改变软件工程的游戏规则。作为一个行业,我们迅速采用提高开发灵活性和部署速度的做法。紧随这些好处之后的一个紧迫问题是:我们对投入生产的复杂系统有多少信心?

PRINCIPLES OF CHAOS ENGINEERING

混沌工程是在系统上进行实验的学科,目的是建立对系统承受生产中动荡条件的能力的信心。

大规模分布式软件系统的进步正在改变软件工程的游戏规则。作为一个行业,我们迅速采用提高开发灵活性和部署速度的做法。紧随这些好处之后的一个紧迫问题是:我们对投入生产的复杂系统有多少信心?

即使分布式系统中的所有单个服务都正常运行,这些服务之间的交互也会导致不可预测的结果。不可预测的结果,加上影响生产环境的罕见但具有破坏性的现实世界事件,使这些分布式系统本质上是混乱的。

我们需要在弱点出现在系统范围的异常行为中之前识别它们。系统性弱点可能表现为: 服务不可用时不正确的回退设置;从调整不当的超时重试风暴;当下游依赖收到过多流量时中断;单点故障崩溃时的级联故障;等等。我们必须在最重要的弱点影响生产中的客户之前主动解决它们。我们需要一种方法来管理这些系统中固有的混乱,利用不断提高的灵活性和速度,并对我们的生产部署充满信心,尽管它们代表着复杂性。

一种基于经验的、基于系统的方法可以大规模解决分布式系统中的混乱问题,并建立对这些系统承受现实条件的能力的信心。我们通过在受控实验中观察分布式系统的行为来了解它。我们称之为混沌工程。

实践中的混乱

为了专门解决大规模分布式系统的不确定性,混沌工程可以被认为是促进实验以发现系统弱点。这些实验遵循四个步骤:

  • 首先将“稳态”定义为系统的一些可测量的输出,表明正常行为。
  • 假设这种稳定状态将在对照组和实验组中继续存在。
  • 引入反映现实世界事件的变量,例如服务器崩溃、硬盘驱动器故障、网络连接中断等。
  • 尝试通过寻找对照组和实验组之间的稳态差异来反驳该假设。

破坏稳定状态越难,我们对系统行为的信心就越大。如果发现了一个弱点,我们现在就有了一个改进目标,以便在该行为在整个系统中显现之前进行改进。

高级原理

以下原理描述了混沌工程的理想应用,应用于上述实验过程。遵循这些原则的程度与我们对大规模分布式系统的信心密切相关。

围绕稳态行为建立假设

关注系统的可测量输出,而不是系统的内部属性。在短时间内对该输出的测量构成了系统稳定状态的代表。整个系统的吞吐量、错误率、延迟百分位数等都可以是代表稳态行为的感兴趣的指标。通过在实验期间关注系统行为模式,Chaos 验证系统确实有效,而不是试图验证它是如何工作的。

改变现实世界的事件

混沌变量反映了现实世界的事件。通过潜在影响或估计频率对事件进行优先级排序。考虑与硬件故障(如服务器死亡)、软件故障(如格式错误的响应)以及非故障事件(如流量激增或扩展事件)相对应的事件。任何能够破坏稳态的事件都是混沌实验中的潜在变量。

在生产环境中运行实验

系统的行为因环境和流量模式而异。由于利用率的行为随时可能发生变化,因此对真实流量进行采样是可靠捕获请求路径的唯一方法。为了保证系统运行方式的真实性以及与当前部署系统的相关性,Chaos 强烈倾向于直接在生产流量上进行试验。

自动化实验以连续运行

手动运行实验是劳动密集型的,最终是不可持续的。自动化实验并连续运行它们。混沌工程将自动化构建到系统中,以驱动编排和分析。

最小化爆炸半径

在生产中进行试验有可能导致不必要的客户痛苦。虽然必须考虑一些短期的负面影响,但混沌工程师有责任和义务确保将实验的后果最小化并加以控制。

混沌工程是一种强大的实践,它已经改变了世界上一些最大规模运营中软件的设计和工程方式。在其他实践涉及速度和灵活性的地方,Chaos 专门解决了这些分布式系统中的系统性不确定性。混沌原则为大规模快速创新提供信心,并为客户提供他们应得的高质量体验。

本文:https://architect.pub/principles-chaos-engineering

Tags

相关文章
|
9天前
|
运维 安全 数据库
混沌工程
混沌工程
35 0
|
11月前
|
缓存 运维 监控
【混沌工程】2022 混沌工程状态(上)
【混沌工程】2022 混沌工程状态
|
11月前
|
消息中间件 Prometheus Kubernetes
【混沌工程】2022 混沌工程状态(下)
【混沌工程】2022 混沌工程状态
|
Dubbo Java 应用服务中间件
无论多忙,都要掌握混沌工程入门方法
无论多忙,都要掌握混沌工程入门方法
|
运维 监控 安全
混沌工程-初识
接受“系统越复杂,越脆弱”的事实,让系统在每一次失败中获益,然后不断进化。在实践中,用一系列的实验来真实的验证系统在各类故障场景下的表现,通过频繁大量的实验,使得系统本身的“反脆弱性”持续增强,让组织建立对系统抵御生产环境中失控条件的能力以及信心。
混沌工程-初识
|
监控 安全 Devops
学习笔记之初识混沌工程
最早由Netflix的技术团队提出,现已经演变成计算机科学的一门新兴学科,即“混沌工程”。
学习笔记之初识混沌工程
|
存储 运维 监控
【混沌工程】什么是混沌工程?
混沌工程让您可以将您认为会发生的事情与系统中实际发生的事情进行比较。 您实际上是“故意破坏”以学习如何构建更具弹性的系统。
|
存储 分布式计算 Kubernetes
【混沌工程】什么是混沌工程? 介绍、定义及更多
软件和系统开发是创新和解决未知问题的练习。 软件和系统是容易出错的,因为它们是由具有不同观点和技能的人(很可能是多人)制作的。 技术变得越来越分散和复杂,尤其是随着微服务的推动。 很少有人拥有完整的端到端知识 […]
|
消息中间件 Prometheus 监控
【混沌工程】2023 混沌工程状态
在过去的十二年里,我有机会参与并见证了混沌工程的发展。出身卑微,最常遇到的问题是“你为什么要这样做?”到今天的位置,帮助确保世界顶级公司的可靠性,这是一段相当长的旅程。
|
机器学习/深度学习 分布式计算 Kubernetes
【混沌工程】故意破坏和混沌工程
在这一集中,Jason 与加拿大皇家银行的开发者宣传总监 Aaron Clark 聊天。 Aaron 分享了最初在 RBC 担任开发人员并从事早期云开发工作,然后过渡到他作为开发人员倡导者的角色的感觉。