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

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

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

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

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

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

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

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

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

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

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

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

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

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

混沌工程:Netflix系统稳定性之道相关推荐

  1. 混沌工程:分布式系统稳定性的“疫苗”

    混沌工程:分布式系统稳定性的"疫苗" 一.容灾了,但没完全容灾 二.NetFlix.猴子与疫苗 三.混沌工程的价值 四.国内混沌工程开源项目现状 1.混沌之刃-ChaosBlade ...

  2. 混沌工程-Netflix的捣蛋猴

    前言: 混沌工程这一工程学理念已慢慢被人所接受,称它为工程学是因为虽然是由国外互联网巨头netflix提出并应用到IT技术中,但是它的思想和应用场景远远超过了互联网领域,可以独立成为一个很有价值的学科 ...

  3. 混沌工程:苏宁系统稳定性之道

    " 随着苏宁多机房的成功部署,流量分流大大缓解了主机房的流量压力. 图片来自 Pexels 但是主机房存在规划不合理,硬件设备老化,基础设施不完善等因素,短期内还无法彻底的解决,这些&quo ...

  4. 混沌实践访谈:混沌工程和系统可观测性密不可分

    在O'Reilly的一份新报告"Chaos Engineering Observability: Bringing Chaos Experiments into System Observa ...

  5. 搞破坏?混沌工程的稳定之道

    1. 始于"混沌" 1.1 混沌的生态环境 随着Agile.ServiceMesh.DevOps 的持续推进,快速响应业务的需求变化,提高持续交付能力.无独有偶,伴随着大量服务拆分 ...

  6. 混沌工程之ChaosBlade(一):建立混沌工程思想

    本系列文章的目标,是将混沌工程作为一个入口,窥探整个分布式系统. 混沌工程之ChaosBlade(一):建立混沌工程思想 混沌工程之ChaosBlade(二):原理深度剖析 一.混沌工程是什么 < ...

  7. 字节跳动混沌工程实践之场景化主动实验

    背景 从 2010 年 Netflix 上线 Chaos Mokey 的第一个版本到现在,虽然混沌工程发展已历时十年,但其实只在少数大厂里面有较成熟的落地,对绝大部分研发同学来说,混沌工程还是一个比较 ...

  8. 解密混沌工程——混沌工程价值

    在数字化转型.十四五规划的大背景 下,大规模上云.分布式的核心改造等"云化"逐渐走进企业. 但是,云化的发展,使企业系统的复杂度呈指数级增长,故障越来越多. 企业在数字化转型中拥抱 ...

  9. 混沌工程详细介绍——Netflix持续交付实践探寻

    内容来源:DevOps案例深度研究 – Netflix的文化与工程实践战队(本文只展示部分案例PPT及研究成果,更多细节请关注案例分享活动,及本公众号). 本案例内容贡献者:高金梅,李晓莉,潘雄鹰,潘 ...

  10. 【稳定性day9】有赞混沌工程的实践 - 不能消灭Bug还不如与之做朋友

    本文来自有赞孙军老师的分享. 随着摩尔定律的终结,单机计算性能已达到了极限,然而,我们的软件系统不论是规模还是复杂度一直在增长,所以软件系统都不约而同的朝着分布式化方向发展.近年来,随着云服务.容器的 ...

最新文章

  1. DOCTYPE声明的几种类型
  2. HOG可视化 opencv
  3. 初学者学习Java的几大技巧
  4. Table表格的单元格提示
  5. 经典C语言程序100例之四五
  6. Java实现根据地理位置获取经纬度
  7. debian 升级后mysql_教你在Debian和Ubuntu上升级MySQL
  8. mysql自增 java_如何在java中自动增加mysql中的用户id
  9. C++之父访谈录:我也没想到 C ++ 会这么成功!
  10. python输入一个序列_Python序列合并,python
  11. 单片机c语言中void key(void),单片机C语言编程
  12. SREng 日志分析方法
  13. VHDL_EDA课设_八音电子琴
  14. iPad/iPhone与电脑共享文件
  15. 《麦田里的守望者》 经典摘录
  16. 由一次线上故障来理解下 TCP 三握、四挥 Java 堆栈分析到源码的探秘
  17. spring boot参数校验 告别校验胶水代码
  18. 大数据开发工程师是做什么的?
  19. 当Proteus 8 Professional运行程序的时候出现有些器件不可用
  20. P2P网络中的节点发现

热门文章

  1. 第三次小组实践作业小组每日进度汇报:2017-12-2
  2. 在虚拟机中配置FastDFS+Nginx模块
  3. Xamarin iOS教程之视图显示图像
  4. SQL导入/导出Excel
  5. 支持-vsdoc.js的jQuery智能提示的VS2008 SP1补丁发布
  6. C#狂想曲(1):去类型化与弱化语法
  7. LeetCode每日一题——只出现一次的数字 III
  8. asp.net下ajax.ajaxMethod使用方法
  9. LOJ #10130 点的距离
  10. oracle 常用语句2