导读:混沌工程,翻译自国外的 Chaos Engineering,在 Netflix 以及最近的一些技术大会得到了广泛关注,本文介绍了混沌工程的一些基本原理。

Netflix不仅是一家互联网视频平台, 它也提出了一系列混沌工程的基本原则。

混沌工程这个词可能听起来不是那么清晰,但它实际上是一种提高技术架构弹性能力的复杂技术手段。

这篇文章旨在解释混沌工程是什么以及它是如何使用的。 我们先简单了解混沌工程的历史。

拥抱"混沌"

为了支持支持日益复杂的业务,Netflix 一直都发力基础设施。现在Netflix拥有分布在190多个国家的1亿用户。早期公司的服务器运行在自己机房,但这会造成单点故障和其他问题。在2008年8月,数据库的问题导致了三天宕机,在此期间在Netflix无法看任何视频。Netflix工程师在2011年将服务迁移到Amazon Web Services。

这种由数百个微服务组成的新型分布式架构消除了单点故障。但它也引入了新的复杂性问题,需要更加可靠和容错性更强的系统。正是在这一点上,Netflix的工程团队学到了重要的教训:通过不断失败避免失败。

"混沌"新用法

为此,Netflix工程师创建了Chaos Monkey,使用该工具可以在整个系统中在随机位置引发故障。正如GitHub上的工具维护者所说,“Chaos Monkey会随机终止在生产环境中运行的虚拟机实例和容器。”通过Chaos Monkey,工程师可以快速了解他们正在构建的服务是否健壮,是否可以弹性扩容,是否可以处理计划外的故障。

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

2012年,Netflix开源了Chaos Monkey。今天,许多公司(包括谷歌,亚马逊,IBM,耐克等),都采用某种形式的混沌工程来提高现代架构的可靠性。 Netflix甚至将其混沌工程工具集扩展到包括整个“Simian Army(中文可以译为猿军)”,用它攻击自己的系统。

混沌工程:不是那么混乱

混沌工程创业公司Gremlin的首席执行官Kolton Andrus曾在Google和Netflix工作过,他建议将混沌工程视为流感疫苗。 Andrus说,故意将有害物质注入体内以防止未来疾病,这似乎很疯狂,但这种方法也适用于分布式云系统。混沌工程会将故障注入系统以测试系统对其的响应。这使公司能够为宕机做准备,并在宕机发生之前将其影响降至最低。

将混沌工程视为实际混乱是一种误解。事实上,大量测试是非随机的。相反,混沌工程会在实施前进行深入思考,组织有计划和受控制的实验,旨在揭示系统在失败时的表现。

“在我去年与客户进行的所有混乱工程实验中,一般只有很少的随机测试,”欧洲混沌ChaosIQ.io的创始人兼首席执行官Russ Miles在接受采访时说。 “他们中的大多数都非常谨慎。它实际上与随机性无关,除非随机性是你想要测试的东西。“

尽量减少雷区

Amalgam Insights的研究员Tom Petrocelli在接受采访时说,混沌工程最佳实践的关键是“尽量减少雷区。 这意味着最大限度地减少对业务的影响。“

“是的,你想发现技术上的漏洞,”Petrocelli说,“但不想损害业务运营。”

为了确保不会破坏业务,Petrocelli建议工程团队“精心策划”混乱工程。

Petrocelli说,确保你有合适的团队来解决任何可能的故障是至关重要的。 “如果所有的Kubernetes工程师都不在场,请不要把Kubernetes容器全部宕机,”他警告说。

不只是测试,也是生成知识的实验

Netflix混沌团队前工程经理Casey Rosenthal在DZone Q&A中明确指出,混沌工程不仅仅是测试系统的一种方法。另一方面,也是一种产生新知识的正确方法。正是因为现代软件系统往往太复杂,任何人都无法完全理解它们,所以工程师会进行实验以揭示有关系统的更多信息。Rosenthal在问答环节中表示,传统测试仍然至关重要,但混沌工程应该是传统测试的补充。

混沌工程以实验发现系统性弱点。这些实验通常遵循四个步骤:

1.定义并测量系统的“稳定状态”。首先精确定义指标,表明您的系统按照应有的方式运行。 Netflix使用客户点击视频流设备上播放按钮的速率作为指标,称为“每秒流量”。请注意,这更像是商业指标而非技术指标;事实上,在混沌工程中,业务指标通常比技术指标更有用,因为它们更适合衡量用户体验或运营。

2.创建假设。与任何实验一样,您需要一个假设来进行测试。因为你试图破坏系统正常运行时的稳定状态,你的假设将是这样的,“当我们做X时,这个系统的稳定状态应该没有变化。”为什么用这种方式表达?如果你的期望是你的动作会破坏系统的稳定状态,那么你会做的第一件事会是修复问题。混沌工程应该包括真正的实验,涉及真正的未知数。

DevOps解决方案策略师、New Relic SRE Beth Long认为:“混沌工程不适用于那些可预测的、被运行手册覆盖的、你知道必须自动化但还没有开始的事件。”“你需要它来处理由复杂性本身产生的各种因素。因为不知道该怎么介入,所以每个人觉得老虎吃天,无从下爪。”

3.模拟现实世界中可能发生的事情。在《混沌工程:通过实验建立对系统行为的信心》一书中,Netflix架构师,Casey Rosenthal,Lorin Hochstein,Aaron Blohowiak,Nora Jones和Ali Basiri,提出了许多混沌工程实践方法:

  • 模拟数据中心的故障

  • 强制系统时钟不同步

  • 在驱动程序代码中模拟I/O异常

  • 模拟服务之间的延迟

  • 随机引发函数抛异常

通常,您希望模拟可能导致系统不可用或导致其性能降低的场景。首先考虑可能出现什么问题,然后进行模拟。一定要优先考虑潜在的错误。 “当你拥有非常复杂的系统时,很容易引起出乎意料的下游效应,这是混沌工程寻找的结果之一,”Petrocelli说。 “因此,系统越复杂,越重要,它就越有可能成为混沌工程的候选对象。”

4.证明或反驳你的假设。将稳态指标与干扰注入系统后收集的指标进行比较。如果您发现测量结果存在差异,那么您的混沌工程实验已经成功 - 您现在可以继续加固系统,以便现实世界中的类似事件不会导致大问题。或者,如果您发现稳定状态可以保持,那么你对该系统的稳定性大可放心。

不要破坏你的系统 - 了解它并改进它

Miles认为:“混沌工程本身并不是要破坏系统。它从来就不是破坏系统的工具,而是学习系统的路径。” “你正试图将团队引入学习循环,总结经验是最好地吸取信息的方式。”

你当然可以从实际问题中学习经验,但这非常痛苦。 “混沌工程让你有机会把问题提前,并将一切置于你的掌控之中。”

混沌工程也可以利用对系统最为了解的工程师。根据Long的说法,“更有趣的混沌工程实验不应该基于重要并且明显的假设,例如'如果这个机架出现故障,该服务延迟会增大但仍然可用',而应是基于对系统深入理解后作出的假设。混沌工程的实施过程有助于将专家直觉转化为明确的,可测试的假设,暴露出有价值的信息,这些信息不仅仅是以局外人的角度来看待系统本身“。

这个网页上https://github.com/dastergon/awesome-chaos-engineering列出了许多混沌工程工具包可供选择。

原文地址:https://blog.newrelic.com/engineering/chaos-engineering-explained/

架构师口中的混沌工程,究竟用来解决什么问题相关推荐

  1. 阿里资深架构师:初识混沌工程(上)

    混沌工程(Chaos Engineering)是什么,你一定听说过那只捣乱猴子的故事(如图1),今天我们来聊聊. 图1"捣乱"的猴子 有没有这种感觉,当你写下第一行代码的时候,后面 ...

  2. 码农与架构师之间的差距,究竟在哪里?

    ‍ 今日一问:你什么时候发现自己技术弱到爆? 没错,就是面试的时候. 昨天一位同学和我说,他工作了3年,特别有信心去面字节跳动的,但没有想到这么抠细节,太难了: · 什么是分布式锁? · 如何实现分布 ...

  3. 都2021年了,你还不知道混沌工程( Chaos Engineering)?

    混沌工程是什么 混沌工程是一门新兴的技术学科,初衷是通过实验性的方法,让人们建立对于复杂分布式系统在生产中抵御突发事件能力的信心. 混沌工程是一门相对高级的系统稳定性治理方法论,它提倡采用探索式的研究 ...

  4. Netflix 混沌工程手册:什么是混沌工程?

    作者 | Netflix 工程师团队 译者 | 侯杰 本文翻译自 Netflix 工程师合著的 Chaos Engineering 一书.这本书介绍了混沌工程的主要概念,以及如何在组织中实践这些概念和 ...

  5. 从甲方到乙方,如何做好混沌工程的行业化落地

    作者:穹谷|阿里云技术专家,ChaosBlade 社区以及商业化产品的 Founder 和 Maintainer ,乐于参与混沌工程布道. 2021 年 12 月 7 日,由信通院主办.混沌工程实验室 ...

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

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

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

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

  8. Android多线程实现方式及并发与同步,架构师必备技能

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8rwcQW4s-1620361703648)(//upload-images.jianshu.io/upload_ima ...

  9. 阿里巴巴为何坚持对混沌工程的研发迭代?

    "阿里巴巴技术团队对混沌工程的研发迭代持续了数年,对于这一技术,阿里为什么如此坚持?" 2010 年底,Netflix 向全世界推出 Chaos Monkey (混乱猴子),该技术 ...

最新文章

  1. 阿里云 ubuntu jdk安装及java环境变量设置
  2. 【 Verilog HDL 】case, casez, casex 之干货总结
  3. poj 2923(状态压缩dp)
  4. python 自动化-Python 接口自动化测试
  5. 代码质量评判标准、设计模式、面向对象设计原则速查表
  6. SOL注入——基于联合查询的数字型GET注入(二)
  7. RUNOOB python练习题12 找素数问题
  8. LeetCode 1230. 抛掷硬币(DP)
  9. MySQL 5.7.18的安装及主从复制(主从同步)
  10. R与Python手牵手:数据框的构建、读取与基本描述
  11. TF400511: Your team has not defined any iterations to use as sprints
  12. activemq中怎么知道推送消息是否成功_消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗?...
  13. Python设计模式:外观模式
  14. 数字电路实验 04 - | 组合逻辑电路的设计与测试
  15. 【清明专刊】悼念逝去老友司徒正美,致敬曾改变世界的Flash
  16. c语言sum求和程序,C语言实现的统计素数并求和代码分享
  17. could't excute 请求的操作需要提升 win32 error 740
  18. LeetCode每日一题495. 提莫攻击
  19. 亚马逊云科技在中国市场火了?真相令人想不到
  20. 乌镇互联网大会:大佬们都爱AI

热门文章

  1. Laravel 学习开篇
  2. 不说技术~我需要调整自己,最近整整两天状态不是很好
  3. 全能系统监控工具dstat
  4. 学习动态性能表(10)--v$session_longops
  5. log4net简单配置打印日志
  6. mysqldump 导出某几张表
  7. C# 通用Clone
  8. 2010 eWEEK 年度产品
  9. 【推荐】如何删除windows服务
  10. pku3176--Cow Bowling