我们只需4/30即可调整Futureestack注册。条款和条件适用。 现在注册

易于学习:混乱的工程解释

10分钟阅读

Netflix不仅仅是在互联网上流动的舞台电视节目的家。它还产生了不需要的必要性 - 对混沌工程的学科。

虽然这个术语可能听起来像矛盾或一个糟糕的科幻电影的标题,但它实际上是提高复杂现代技术架构的弹性的越来越流行的方法。

这篇文章旨在帮助解释混乱的工程是什么以及它如何使用。但首先,快速历史课程可以帮助混沌工程进入视角。

拥抱“混乱”

多年来,Netflix演变了其基础设施,以支持日益复杂和资源饥饿的活动,特别是其客户群增长190多个国家的1亿用户。该公司是原始租赁和流媒体服务在上提下的机架式服务器中运行,但这造成了单点故障和其他问题。著名的是,2008年8月,在一个主要数据库中的腐败导致三天的中断在其中Netflix无法运送任何DVD。作为回应,Netflix工程师出发了找到替代架构,并在2011年,他们将公司的整体部署栈迁移到基于分布式云的架构上运行的亚马逊网络服务

这个新的分布式架构由数百个微服务组成,删除了单点故障。但它还引入了新型复杂性,需要更具可靠和容错系统。目前,Netflix的工程团队学会了一个关键的课程:通过不断失败,避免失败。

混乱的新用途

为了做到这一点,Netflix的工程师创造了混乱猴子,可以使用的工具来主动地在整个系统中以随机的间隔在随机位置引起故障。进一步来说,如工具在GitHub上的维护者陈述,“Chaos Monkey随机终止在生产环境中运行的虚拟机实例和容器。”有了Chaos Monkey,工程师们很快就能知道他们所构建的服务是否足够健壮和有弹性计划生意见失败。

随着Chaos猴的出现,一个新的学科出生:混沌工程被形容为 ”在分布式系统上进行实验的学科,以便在系统抵御生产中稳定动荡的条件下的信心。“

2012年,Netflix在开源许可下发布了Chaos Monkey。今天,无数的公司,从谷歌到亚马逊到IBM到耐克,所有练习某种形式的混乱工程,以提高其现代架构的可靠性。Netflix甚至扩展了混沌工程工具集,包括整个“猿猴,”它攻击了自己的系统。

混沌工程:不是真正的混乱

Kolton安德鲁斯,混沌工程启动的首席执行官格里蒙,谁在谷歌和Netflix工作,建议对混沌工程作为流感疫苗的思考。故意将一些有害的东西难以预测未来的疾病,似乎疯了,但这种方法还与基于分布式的云的系统合作,Andrus表示。Chaos Engineering涉及仔细注入危害,以测试系统对它的回应。这允许公司准备和实践中断,并最大限度地降低运行在发生前的影响。

这里最重要的词是小心。将混沌工程视为实际混乱是一个不合格的人。事实上,很少有这种测试是随机的。相反,混沌工程涉及旨在展示您在面对失败的系统所行能的表现。

“除了去年客户的所有混沌工程实验中,我可能只能算一个或两个对他们有一个随机的配额,”russ里数,创始人兼首席执行官Chaosiq.io.该公司是欧洲的一个混沌工程平台。“他们中的大多数都是非常小心、非常可控、适当的实验。它与随机性毫无关系,除非随机性是你想要测试的内容。”

最小化爆炸区域

汤姆·彼得科利是一位研究员Amalgam见解,在面试中说,一个关键的混乱工程最佳实践是“最小化爆炸区域。这意味着最大限度地减少对业务的影响 - 不一定要在技术上。“

“是的,你想发现你的技术恢复力的漏洞,”Petrocelli说道“,但你想以一种不会破坏业务运营的方式这样做。”

为了确保他们不会搞乱业务,帕特塞利建议工程团队为混乱的工程工作“精心计划”。他说,如果你足够幸运,就会出现意料之外的错误,这在混沌工程领域被认为是成功的。

考虑到这一点,Petrocelli表示,确保有合适的团队来修复任何可能出现的问题是至关重要的。他警告说:“如果你所有的Kubernetes工程师都在外地开会,那就不要乱动Kubernetes的容器。”

不仅仅是测试:生成知识的实验

凯西罗森哈尔是Netflix Chaos团队的前工程经理,使其清除Dzone问答混沌工程不仅仅是测试系统。测试查找二进制输出。有些东西通过了特定的挑战吗?是还是不是?另一方面,混沌工程是产生新知识的正式方法。正是因为现代软件系统对于任何人来说太复杂,无法完全理解它们,工程师执行实验,以揭示更多关于系统的信息。在Q&A中的Rosenthal表示,测试仍然至关重要,但混沌工程应该补充传统测试。

混沌工程可以被认为是促进实验来揭示全身弱点的实验。这些实验经常遵循四个步骤:

1.定义和测量系统的“稳态”。首先定位指示实时指示的度量标准,即您的系统应该以其工作方式工作。netflix使用速率客户按视频流设备上的播放按钮称之为“每秒流”。请注意,这更多的是业务指标而不是技术指标;事实上,在混沌工程中,业务度量通常比技术度量更有用,因为它们更适合度量客户体验或操作。

2.创建一个假设与任何实验一样,你需要一个假设来检验。因为你试图扰乱系统的正常运行——稳态——你的假设是这样的,“当我们做X时,这个系统的稳态应该没有变化。”为什么要这么说呢?因为如果你有一个合理的期望你的一个特定的动作会改变一个系统的稳态,那么你应该做的第一件事就是修正系统使这个动作不会产生那样的效果。你的混沌工程活动应该包括真正的实验,包括真正的未知数。

“混沌工程不适合那些可以很好预测的、运行手册所涵盖的、你知道你必须要自动化但只是还没有着手去做的事件,”他说贝丝龙,Devops解决亚博直播平台方案战略家 - 以前的网站可靠性工程师 - 新遗物。“你需要它为从复杂性本身的性质产生的东西。每个人都在哪里松弛并划伤他们的头,因为他们不知道该怎么想。“

3.模拟现实世界可能发生的事情。在奥里利书中,混沌工程:通过实验构建对系统行为的信心,Chaos Engineering,Casey Rosenthal,Lorin Hochstein,Aaron Blohowiak,Nora Jones和Ali Basiri的Netflix架构师建议了许多混沌工程实验:

  • 模拟数据中心的故障
  • 强制系统时钟变得异常
  • 在仿真I / O错误的驱动程序代码中执行例程
  • 诱导服务之间的延迟
  • 随机导致函数抛出异常。

通常,您想模拟有可能使系统变得无法使用或导致其性能降低的方案。问问自己,“什么可能出错?”然后模拟。务必优先考虑潜在的错误。“当你拥有非常复杂的系统时,很容易获得你没有预期的下游效果,这是混乱工程所寻求找到的事情之一,”Petrocelli说。“所以系统的复杂性越复杂,它的重要性越多,候选人就越可能是混乱工程。”

4.证明或反驳你的假设。将您的稳态度量与您收集的人进行比较,在将干扰注入系统后。如果您发现测量的差异,您的混乱工程实验已经成功 - 您现在可以继续加强并准备您的系统,因此在现实世界中类似的事件不会导致问题。或者,如果您发现您的稳态仍然稳定,您可以在系统的那部分地走出更高程度的信任。

休息您的系统 - 了解它并改进它

“混乱的工程并不是关于突破事物的事情 - 这从来没有关于打破事物 - 但关于学习,”迈尔斯说。“你正试图为团队介绍一个学习循环,以及群体中的人类吸收信息的方式是通过经验。”

当然,你可以从实际的中断中学习,但这是非常痛苦的,Russ指出。“混沌工程让你有机会做这些在你控制范围内的‘预剖析’。”

混沌工程还利用了最了解复杂系统的人的大脑。根据长”,更有趣的混乱工程实验不是基于important-but-obvious假说,“如果这架失败,该服务应增加延迟但仍然可用,“但假设你可能认为没有一个强有力的直观的了解系统和任何最近的事件。混沌工程过程有助于将专家的直觉转化为明确的、可测试的假设,暴露出作为一个局外人很难从系统本身获得的有价值的信息。”

说,有很多工具包马修研究员,主要顾问迪伦是一家位于澳大利亚墨尔本的咨询公司,该公司为客户提供了Chaos工程项目。(查看GitHub上的混沌工程资源的策划列表:https://github.com/dastergon/awesome-chaos-engineering。)“继续前进,获得混乱的猴子,并用它来炸掉你的一个实例,”研究员建议。“如果你以前从未这样做过,但绝对是值得的,这是非常可怕的。”