1. 始于“混沌”

1.1 混沌的生态环境

随着Agile、ServiceMesh、DevOps 的持续推进,快速响应业务的需求变化,提高持续交付能力。无独有偶,伴随着大量服务拆分,服务之间依赖复杂化,即便是分布式系统中每个独立的服务都正常工作,服务之间的相互调用也仍然可能造成不可预期的结果。这些结果在现实中可能很少发生,但是一旦发生就会影响整个生产环境,使得整个分布式系统变得混乱不堪,甚至出现服务雪崩、系统全面宕机。

1.2 故障是新常态

“故障是注定的,随着时间的流逝,一切终将归于失败”。我们必须接受故障发生是新常态的想法,处在部分故障的系统正常运行是完全可行的。当我们处理多达几十个服务实例的小型系统时,100%的健康运行通常是正常状态,故障则是一种特殊情况。然而,在处理大规模系统时,即100%的健康运行几乎是不可能实现的。

2. 拥抱“混沌”

混沌工程不是制造问题,而是揭示问题。

—Nora Jones,Netflix 高级混沌工程师

2.1 探索性测试

在敏捷测试(Agile testing)中,探索性测试(Exploratory Testing)是作为一个重要组成部分而出现的。由Cem Caner首次提出,80年代就一直存在的测试方法,2011年James Whittaker出版《探索式软件测试》后,在业内引起广泛关注。

探索性测试可以说是一种测试思维技术,主要由经验丰富的测试人员实施。该方法能够基于已有的知识、启发式的理念和风险领域在有限的时间内,把“对系统的探索”和“对系统进行测试”结合在一起,达成“敏捷”的目标。

2.2 Netflix提出了混沌工程

2008年8月, Netflix 主要数据库的故障导致了三天的停机, DVD 租赁业务中断,多个国家的大量用户受此影响。之后 Netflix 工程师着手寻找替代架构,并在2011年起,逐步将系统迁移到 AWS 上,运行基于微服务的新型分布式架构。这种架构消除了单点故障,但也引入了新的复杂性类型,需要更加可靠和容错的系统。为此,Netflix工程师,巧妙地将探索性测试方法,以生产验证的形式,创建了Chaos Monkey(捣乱的猴子),随机注入故障。正如GitHub上的工具维护者所说,“Chaos Monkey会随机终止在生产环境中运行的虚拟机实例和容器。”

随着Chaos Monkey的出现,一门新学科诞生了:混沌工程,被描述为“在分布式系统上进行实验的学科,目的是建立对系统承受生产环境中湍流条件能力的信心。”。

3. 初窥“混沌”

3.1 和传统测试的区别

混沌工程和传统测试(故障注入FIT、故障测试)在关注点和工具集上都有很大的重叠。譬如,在Netflix的很多混沌工程实验研究的对象都是基于故障注入来引入的。混沌工程和这些传统测试方法的主要区别在于:混沌工程是发现新信息的实践过程,而故障注入则是对一个特定的条件、变量的验证方法。

在传统测试中,我们可以写一个断言(assertion),即我们给定一个特定的条件,产生一个特定的输出。测试一般来说只会产生二元的结果,验证一个结果是真还是假,从而判定测试是否通过。严格意义上来说,这个过程并不能让我们发掘出对于系统未知的、尚不明确的认知,它仅仅是对我们已知的系统属性可能的取值进行测验。而实验可以产生新的认知,而且通常还能开辟出一个更广袤的对复杂系统的认知空间。

混沌工程是一种帮助我们获得更多的关于系统的新认知的实验方法。它和已有的功能测试、集成测试等以测试已知属性的方法有本质上的区别。

3.2 混沌工程目标

在处理大规模系统时,即100%的健康运行几乎是不可能实现的。因此,运维的新常态便是接受部分故障。处在部分故障中的系统要求仍能正常运行对外提供服务,这就需要架构本身具备 Resilient 能力,这里的Resilient即为韧性(具备恢复能力)。

混沌工程就是利用实验提前探知系统风险,通过架构优化和运维模式的改进来解决系统风险,真正实现上述韧性架构,降低企业损失,提高故障免疫力。

3.3 引入的先决条件

在引入混沌工程之前先要确定你的系统是否已经具备一些弹性来应对真实环境中的一些异常事件,像某个服务异常、网络闪断、瞬间延迟提高等;

另一个先决条件是完善的监控平台,你需要用它来判断系统当前的各项状态。如果你没有对系统行为的可见能力,那么也就无法从实验中得出有效的结论。

3.4 实践五大原则

为了具体地解决分布式系统在规模上的不确定性,可以把混沌工程看作是为了揭示系统缺陷而进行的实验。破坏稳态的难度越大,我们对系统行为的信心就越强。如果发现了一个缺陷,那么我们就有了一个改进目标。避免在系统规模化之后问题被放大。在开发混沌工程实验时,可遵循以下五大原则,将有助于实验设计:

建立稳定状态的假设:

“稳定状态”是可以通过一些指标来定义,当系统指标在测试完成后,无法快速恢复稳态要求,可以认为这个系统是不稳定的。

  • 关注可测量输出,而不是系统内部属性;
  • 短时间内的度量结果,代表了额系统的稳定状态;
  • 验证系统是否工作,而不是如何工作;

多样化现实世界事件:

混沌变量反应了现实世界中的实践,通过潜在的影响或预估频率排定事件的优先级,任何能够破坏稳态的实践都是混沌实验中的一个潜在变量。

为了能够更体感、有效率地描述故障,我们优先分析了P1和P2的故障(P是阿里对故障等级的描述),提出一些通用的故障场景并按照IaaS层、PaaS层、SaaS层的角度绘制了故障画像。

在生产环境运行实验:

根据环境与流量模式的不同,系统运行效果亦将受到影响。由于运行效果可能随时改变,因此我们应将对实际流量进行采样作为获取可靠请求路径的惟一方法。为了保证系统运行方式的真实性以及同现有部署系统间的关联性,混沌工程原则强烈建议您直接面向生产流量进行实验。

持续自动化运行实验:

当今的系统越来越复杂,这意味着我们无法通过劳动密集型的手动且持续运行。因此我们要在系统中构建自动化持续集成运行。

最小化“爆炸半径”:

混沌实验通过很多方法来探寻故障会造成的未知的、不可预见的影响,关键在于如何让这些薄弱环节曝光出来而不会意外造成更大规模的故障。我们称之为最小化“爆炸半径”。

在生产中进行实验可能会造成不必要的客户投诉,但混沌工程师的责任和义务是确保这些后续影响最小化,且被考虑到。

3.4 实践案例

公司

开源项目

传送门

Netflix

Chaos Monkey

https://github.com/Netflix/chaosmonkey

阿里

ChaosBlade

https://github.com/chaosblade-io/chaosblade

PingCAP

Chaos Mesh

https://github.com/pingcap/chaos-mesh

4. 总结

随着 ServiceMesh,Serverless 等理念的兴起,我们的系统真的趋向于越来越分布式, Netflix 的实践也证明了混沌工程在稳定性领域所带来的巨大意义。相信随着互联网逐渐转变成一项基础设施服务,其稳定性将被不断强调。而我们要做的只是直面故障,不惧故障,避免黑天鹅事件的发生。

不是由你来选择那一刻,而是那一刻来选择你!    你只能选择为之做好准备。

参考文献:

《混沌工程:Netflix 系统稳定性之道》: https://www.oreilly.com/library/view/chaos-engineering/9781491988459/

《阿里云栖号》:https://segmentfault.com/a/1190000018059404

《混沌工程实践》:https://mp.weixin.qq.com/s/i8jy-iPc4iC-WKmKUn0pRQ

《混沌工程初识》:https://honeypps.com/chaos/chaos-engineering-start/

搞破坏?混沌工程的稳定之道相关推荐

  1. Netflix正在搞的混沌工程到底是什么?终于有人讲明白了

    导读:与任何新概念一样,混沌工程时常被误解.本文会探讨混沌工程是什么以及不是什么. 作者:Casey Rosenthal, Nora Jones 来源:大数据DT(ID:hzdashuju) 在Net ...

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

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

  3. 国内先进混沌工程平台发布在即,同创永益携手「DaoCloud 道客」助力企业数字化转型

    5 月 31 日 14:00,国家级高新技术企业和信创工委会成员单位「同创永益」,联合企业级云原生领域创新领导者「DaoCloud 道客」主办的 -- 混沌工程产品联合发布会,即将拉开帷幕.本次会议以 ...

  4. Netflix混沌工程手册Part 2:混沌工程原则

    本文翻译自Netflix工程师合著的 *Chaos Engineering*一书.这本书介绍了混沌工程的主要概念,以及如何在组织中实践这些概念和经验.也许我们开发的相关工具只适用于Netflix自身的 ...

  5. 【译】混沌工程与区块链

    作者 Vipin Bharathan 原文:https://medium.com/@vipinsun/chaos-engineering-the-blockchain-51e60ae74d27 第一部 ...

  6. 分布式系统保障—混沌工程—初识

    原文作者: 朱小厮的博客 原文地址:混沌工程(Chaos Engineering)初识 编辑推荐: 本文主要介绍什么是混沌工程.混沌工程的五大原则.混沌工程成熟度模型(CMM)以及混沌工程的目标--韧 ...

  7. China .NET Conf 2019-.NET技术架构下的混沌工程实践

    这个月的8号.9号,个人很荣幸参加了China.NET Conf 2019 , 中国.NET开发者峰会,同时分享了技术专题<.NET技术架构下的混沌工程实践>,给广大的.NET开发小伙伴介 ...

  8. Gremlin发布混沌工程实验平台免费版,开放了“故障即服务”功能

    Gremlin团队最近发布的"Gremlin免费版",开放了Gremlin"故障即服务"功能,支持在SaaS平台上的运行部分混沌工程实验.当前开放的免费版本允许 ...

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

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

最新文章

  1. e2e测试框架之Cypress
  2. 【学习/研发】嵌入式Linux/Android开发有它就够了——迅为4412开发板
  3. .NET与鲲鹏共展翅,昇腾九万里(二)
  4. tr069相关协议说明
  5. netbeans搭建安卓开发环境
  6. 保持代码工整的 7 个小技巧
  7. 云计算设计模式(二十四)——仆人键模式
  8. mysql中sql批量插入_sql中insert如何批量插入多条记录?
  9. eclipse 无法启动选择的项,最近未进行任何启动
  10. violate原理,java内存模型,可见性,cache二级内存模型
  11. [环境搭建]-Web Api搭建到IIS服务器后PUT请求返回HTTP Error 405.0 - Method Not Allowed 解决方法
  12. Matlab 2015b安装教程
  13. 虚拟化试题1-网络和存储
  14. 帆软之使用FineTube将其他来源数据同步至简道云表单(多图预警)
  15. java短信验证码接口demo分享
  16. 2014清华计算机系直博名单,2014年清华大学博士研究生拟录取名单公示
  17. 台式计算机如何双屏显示,台式计算机如何同时连接显示器和电视双屏显示器?...
  18. 统计学基础--假设检验
  19. vivo手机安装应用提示未安装
  20. PHP WebShell源码下载(1)

热门文章

  1. 字节跳动 录屏功能_视频激励-录屏分享参考规范
  2. word表格中如何查看隐藏线
  3. 【FFmpeg】编码器流程分析
  4. python5的阶乘_python递归求阶乘的方法
  5. 3S基础知识:MapInfo自定义符号详解
  6. 实战zabbix之:安装及踩坑
  7. matlab xp系统时间,Windows XP系统的电脑时间总是不准怎么办?修复正确的电脑时间的方法...
  8. lcd驱动-虽无框架感但按裸机思路阐释硬件原理
  9. Excel中,单元格内选取指定字符之间的字符,MID()函数的使用,MID()函数与IFS()函数使用
  10. 〖Python零基础入门篇⑲〗- 字符串的编码格式