混沌工程:Netflix系统稳定性之道

简介: 每个软件从业者从写下第一行代码开始,就一刻不停地在和软件中的错误做斗争。近年来,随着系统架构逐渐向微服务架构演化,开发效率以及系统扩展性大幅提高。但同时,系统的复杂性也随之提高,传统的测试方法已经不能全面理解和覆盖系统所有可能的行为,测试的有效性被大打折扣。

每个软件从业者从写下第一行代码开始,就一刻不停地在和软件中的错误做斗争。

近年来,随着系统架构逐渐向微服务架构演化,开发效率以及系统扩展性大幅提高。但同时,系统的复杂性也随之提高,传统的测试方法已经不能全面理解和覆盖系统所有可能的行为,测试的有效性被大打折扣。我们通过各种测试、SRE、DevOps、金丝雀发布、蓝绿部署、预案、故障演练等方法,希望能够防患于未然。但服务规模不断增长,服务之间的依赖性所带来的不确定性也呈指数级增长。在这样的服务调用网中,任何一环出现的正常或异常的变化,都有可能对其他服务造成类似蝴蝶效应一般的影响。

软件系统自身复杂度的激增开发者在引入复杂性的同时对风险的低估和忽视,是系统可用性面临的两大挑战。

为了应对这两大挑战,Netflix 选择了一条不同寻常的路。

_

2008年Netflix开始将服务从数据中心迁移到云上,之后就开始尝试在生产环境中开展一些系统弹性的测试。过了一段时间,这个实践过程才被称为混沌工程。最早被大家熟知的是“混乱猴子”(Chaos Monkey),因为其在生产环境中随机关闭服务节点而“恶名远扬”。进化成为“混乱金刚”(Chaos Kong)之后,这些之前获得的小规模益处被扩大到非常大。规模的扩大得益于一个叫作“故障注入测试”(Fault Injection Test,FIT)的工具。

随后确立了混沌工程的若干原则,用于将这个实践进行规范并学科化,同时推出了混沌工程自动化平台,使得混沌工程实验能够在微服务体系架构上7×24小时不间断地自动运行。

_

从混乱猴子开始,Netflix 为应对不确定性的领域带来了一种全新的思维方式——主动出击。这种主动出击的思维方式衍生出的一套实践方法,就是混沌工程,它旨在从根本上改变开发者应对软件缺陷和故障的思维方式。

在此之前,我们期望通过一系列的测试验证手段,尽最大的可能确保在线上运行的系统没有缺陷和故障。而混沌工程的理念认为这既不现实,也不符合系统自然发展的规律。混沌工程提倡我们首先要正面接受系统一定会存在缺陷,并且一定会时不时地发生故障的事实;然后,要求我们通过一系列实验找出可能发生问题的风险点,进而在不断加固系统的同时,促使开发者在开发软件时必须选择将防御性内建在系统中。

_

“混乱”一词让我们想起随机性和无序性。然而,这并不意味着混沌工程的实施也是随机和随意的,也不意味着混沌工程师的工作就是引发混乱。让系统在每一次失败中获益,然后不断进化,这是混沌工程的核心思想。

在实践中,混沌工程提倡用一系列实验来真实地验证系统在各类故障场景下的表现,通过频繁地进行大量实验,既使得系统本身的反脆弱性持续增强,也让开发者对系统越来越有信心。因为在每天自动运行的大量实验下,开发者不得不在编码时思考“我的代码如何在这些混沌实验场景下存活下来”,并逐步提高质量,形成正向循环。

_

混沌工程非常适合用于暴露生产系统中未知的脆弱环节,但如果你很确定一个混沌工程实验会导致系统出现严重的故障,那么进行这样的实验是没有任何意义的。你需要先解决这个问题,然后再回到混沌工程,在进行混沌工程实验之后,你要么能继续发现更多未知的脆弱点,要么能对系统真实的弹性水平更有信心。

另外,你需要用配套监控系统来判断系统当前的各项状态。如果无法对系统行为进行观察,你就无法从实验中得出有效的结论。

Netflix_

你可以将混沌工程视为一种解决“我们的系统离混乱边缘有多少距离”的经验方法。从另一个角度去思考,“如果我们把混乱注入系统,它会怎么样?”

减少问题的最好方法就是让问题经常性地发生,通过不断重复失败过程并找出解决方案,来持续提升系统的容错能力和弹性。混沌工程作为一门新兴学科,还处于一个定义和被定义的过程。如果你对混沌工程感兴趣,愿意去了解和实践混沌工程,非常推荐你从《混沌工程:Netflix系统稳定性之道》一书开始行动。

相关文章
|
2月前
|
数据挖掘 项目管理 调度
「软件项目管理」一文详解软件项目质量计划
该文章全面介绍了软件项目质量计划的制定方法,涵盖了质量模型、质量管理过程、质量保证与控制技术,并提出了软件质量改善的具体建议,帮助项目管理人员有效地提升软件产品的质量水平。
「软件项目管理」一文详解软件项目质量计划
|
3月前
|
开发框架 缓存 Android开发
Flutter相关痛点解决问题之研发环境与工程管理中的配置难题如何解决
Flutter相关痛点解决问题之研发环境与工程管理中的配置难题如何解决
|
3月前
|
运维 监控 安全
运维之道:从混沌到秩序的系统管理之旅
【8月更文挑战第21天】在数字时代的浪潮中,运维(Operations)如同航船的舵手,确保技术之舟稳健航行。本文将深入浅出地探讨运维的核心理念与实践,从日常监控、故障响应到系统优化,揭示运维工作如何影响企业IT架构的稳定性与效率。我们将一窥运维人员如何在技术的海洋中导航,保持系统的顺畅运行,并应对突如其来的风浪。
|
测试技术 调度 C++
六年打磨!阿里开源混沌工程工具 ChaosBlade
减少故障的最好方法就是让故障经常性的发生。通过不断重复失败过程,持续提升系统的容错和弹性能力。今天,阿里巴巴把六年来在故障演练领域的创意和实践汇浓缩而成的工具进行开源,它就是 “ChaosBlade”。如果你想要提升开发效率,不妨来了解一下。
11956 0
|
4月前
|
机器学习/深度学习 算法 定位技术
环境系统工程是系统工程的一个分支,它特别关注于环境问题的系统分析和解决方案。
环境系统工程是系统工程的一个分支,它特别关注于环境问题的系统分析和解决方案。
|
6月前
|
Kubernetes 监控 容器
K8S故障注入混沌工程开源平台ChaosMesh
总之,ChaosMesh作为一个Kubernetes混沌工程平台,为用户提供了测试和验证Kubernetes集群的可靠性的工具和框架,有助于提高系统的稳定性和性能。
235 0
|
设计模式 消息中间件 监控
【韧性工程】所有开发人员都应该知道的韧性软件策略
【韧性工程】所有开发人员都应该知道的韧性软件策略
|
消息中间件 运维 监控
ChaosBlade 在工商银行混沌工程体系中的应用实践
ChaosBlade 在工商银行混沌工程体系中的应用实践
383 0
|
缓存 Kubernetes Cloud Native
混沌实施工具ChaosBlade实践
项目介绍 ChaosBlade 是阿里巴巴开源的混沌工程原理和混沌实验模型的实验注入工具。 ChaosBlade 使用比较简单,而且支持丰富的实验场景,场景包括: 基础资源:比如 CPU、内存、网络、磁盘、进程等实验场景; Java 应用:比如数据库、缓存、消息、JVM 本身、微服务等,还可以指定任意类方法注入各种复杂的实验场景; C++ 应用:比如指定任意方法或某行代码注入延迟、变量和返回值篡改等实验场景; Docker 容器:比如杀容器、容器内 CPU、内存、网络、磁盘、进程等实验场景; 云原生平台:比如 Kubernetes 平台节点上 CPU、内存、网络、磁盘、进程实验场景,Pod
225 0
《阿里云总监课第五期第二节:可靠性探索–利用混沌工程理念提高工程可靠性》电子版地址
阿里云总监课第五期第二节:可靠性探索–利用混沌工程理念提高工程可靠性
142 0
《阿里云总监课第五期第二节:可靠性探索–利用混沌工程理念提高工程可靠性》电子版地址