共计 4245 个字符,预计需要花费 11 分钟才能阅读完成。
混沌工程不是灵丹妙药,不会主动修复零碎和解决问题。市面上有很多工具能够更轻松地施行混沌试验,但真正的艰难在于对系统行为的预测。增加故障很容易,艰难的是晓得在哪里注入以及为什么要注入。换句话说,从混沌试验中取得的价值,取决于零碎自身、对系统的了解深度以及建设可观测性的水平。本文将分享无关混沌试验的四步心法,帮忙大家更快上手混沌工程。
一、混沌工程不是什么
“混沌工程是在分布式系统上进行试验的学科, 目标是建设对系统抵挡生产环境中失控条件的能力以及信念。”
然而,混沌工程不是灵丹妙药,它不会主动修复您的零碎。事实上,甚至可能并不适用于您的任何状况。
一个常见的误会,混沌工程就是用来随机毁坏零碎。
这可能和名字有关系,Chaos Monkey(混沌猴子) 是第一个在该畛域取得业界名誉的工具,它在很大水平上依赖于随机性。随机性是一种弱小的工具,并且有时与含糊测试有重叠。
但通常,增加失败都很容易;艰难的是晓得在哪里注入以及为什么要注入。
混沌工程不仅仅是 Chaos Monkey、ChaosToolkit、PowerfulSeal 或 GitHub 上可用的泛滥我的项目中的任何一个。
这些工具能够更轻松地施行某些类型的试验,但真正的艰难在于学习如何批判性地对待零碎并预测可能存在的软弱点。
另外,混沌工程不会取代已有的测试方法(例如单元或集成测试等),而是对已有测试方法的补充。
在碰撞测试期间,安全气囊可独自测试,也可与汽车的其余部件一起进行,混沌工程能够在不同的零碎级别上运行和测试。
每个零碎都不同,您须要深刻理解零碎的弱点,能力提出有用的混沌试验。
换句话说,您从混沌试验中取得的价值将取决于您的零碎、您对系统的了解水平、您想要测试零碎的深度以及您建设可观测性的水平。
只管混沌工程的独特之处在于,其可利用于生产零碎,但这并不是惟一场景。
网上很多混沌工程的内容仿佛都围绕着“生产中的毁坏”,很可能是因为这是您能做的最激进的事件,但同样,这并不是混沌工程的全副——甚至不是它的次要关注点。
因为,您也能够从混沌工程原理利用在其余环境中取得价值。
最初,混沌工程并非源于数学和物理学中的混沌实践。
二、什么是混沌试验
混沌工程试验(简称混沌试验)是混沌工程的根本组成,也是重要的表现形式,即通过一系列混沌试验进行混沌工程实际。
给定一个零碎及其肯定数量的零碎个性,就能够设计试验来察看零碎在产生故障时的种种体现。每个试验都专一于证实或反驳试验前对系统受故障影响的假如。
2.1 混沌试验的示例
例如,假如您经营着一个风行的网站,保护着整个数据中心。如何让网站在断电后仍能够失常运行?比方,在数据中心中装置了两个独立的电源。
实践上,这能够解决这个问题——但在实践中,仍存在着很多潜在的其余问题:兴许电源之间的主动切换不起作用,亦或者网站的规模曾经大到,繁多电源无奈为所有服务器提供足够的电力。
除此之外,是否每三个月有请电力工程师进行定期检查?
探讨到这里,您会放心。
好在,咱们有混沌工程这个技术。设计一个简略的混沌试验,用迷信的形式,通过试验阐明当其中一个电源呈现故障时零碎会产生什么。甚至整个试验操作,可抉择新进的实习生来执行这些步骤。
对所有电源反复以下过程,一次一个:
- 查看网站是否失常运行
- 关上电气面板并关闭电源
- 查看网站是否仍在失常运行
- 从新关上电源
这个过程很毛糙,听起来很简略,让咱们再回顾一下这些步骤。
给定一个零碎(一个数据中心)和一个零碎个性(在单个电源故障时仍能工作),您设计了一个试验(关闭电源并察看网站是否仍在运行),若后果与预期假如统一,就会减少您对系统的信念。
不过(话锋一转),有一件事咱们不能漏掉,即有必要问问如果这个试验失败会产生什么?
在这个过于粗略的试验中,您将自行制作故障点,这里就须要很审慎,咱们要最大限度地缩小试验带来的危险,抉择适合的环境来执行。稍后咱们将对此进行更多介绍。
下图总结了您刚刚经验的混沌试验过程。
您会接着提出下一个问题:如果您正在解决更为简单的零碎,应该怎么办?
首先要对系统造成一个想要证实或反驳的假如,而后围绕该假如设计整个试验。
格雷戈尔·孟德尔,这位遗传学家,还记得吗?
当他对遗传法则有了假如时,设计了一系列对于黄豌豆和绿豌豆的试验,以证实显性和隐性遗传性状的存在。尽管,试验后果没有达到预期,事实上,这就是他在遗传学方面获得冲破的形式。这和咱们当初在探讨的试验形式很相似。
上面咱们来认真讨论一下混沌试验的具体步骤和注意事项。
2.2 混沌试验的四个步骤
让咱们先简略捋一遍图上的步骤要点,前面会深刻探讨。
- 试验后果的可观测性
无论是豌豆的色彩、假人碰撞测、网站是否失常运行、CPU 负载、每秒申请数还是胜利申请的提早,第一步总是先确保,能够精确读取到这些数值。
自从有了计算机,咱们能够轻松生成十分精确和具体的数据。这个咱们称之为可观测性。
- 应用观测数据定义失常的状态
通过这种形式,您就能够理解零碎行为在何时超出了预期范畴。
例如,您可能心愿应用服务器在工作工夫内,均匀 15 分钟的 CPU 负载低于 20%。或者,您可能冀望在硬件参考标准中,四核应用服务器的实例每秒有 500 到 700 个申请。
这个失常范畴被称为稳固状态,简称稳态。
- 利用观测数据验证直觉假如
直觉假如的一个简略例子,“杀死其中一台机器不会影响服务的均匀提早。”
执行试验,进行测量以得出您的假如是否正确的论断。乏味的是,您可能会喜爱犯错,因为那时您能学到更多的货色,而后持续试验,顺次迭代。
- 试验越简略越好
您不会因精心设计的设计而取得加分,除非这是证实假如的最佳形式。
上面,让咱们对混沌试验的四步骤进行更深刻的探讨。
第一步 设置可观测指标
“可观测性”这个词,十分含糊其辞,这意味着可能牢靠地查看您感兴趣的任何指标。这里的另一个关键词则是牢靠。
硬件生产商或操作系统曾经提供了读取各种指标的机制,从 CPU 的温度到风扇的 RPM,再到内存应用和各种内核事件钩子。
这里要小心的一点是,这些指标的采集器会影响指标的准确性。例如,您用来测量 CPU 负载的工具,其应用的 CPU 比您的应用程序多,那可能是一个问题。
如果您曾在电视上看过汽车碰撞测试,就会晓得它既令人恐怖又令人着迷:一台 1.5 吨轿车减速到一个精心管制的速度,而后像纸天鹅一样撞击到一块微小的混凝土。
然而,碎玻璃飞来飞去的高清慢动作镜头,几秒钟前坐在汽车中的假人看似没有受伤(并且没有受到影响),这不仅仅是为了娱乐。碰撞测试专家和混沌工程从业者都须要牢靠的数据来判定试验是否无效。
这就是为什么可观测性至关重要,可能牢靠地收集实时零碎的数据至关重要。
第二步 定义零碎稳态
有了上一步的牢靠数据(可观测性),须要定义什么是零碎稳态,以便能够辨认异样。
观测指标将取决于您的零碎和想实现的指标。它可能是“未损坏的汽车以 100 公里 / 小时的速度直行”,或者“99% 的用户能够在 200 毫秒内拜访 API”。
通常,观测指标应间接由业务需要驱动。
让咱们以过程的 CPU 使用率为例。听起来很简略,但在实践中,很多事件都会产生影响。
- 该过程是否取得了足够的 CPU?是否被其余过程窃取?
- 可能是共享机器,或者可能是 cron 在试验期间启动更新零碎的工作?
- 内核调度是否将 CPU 调配给了另一个具备更高优先级的过程?
- 管理程序决定其余过程更须要 CPU?
按这种思路,您继续深刻挖掘问题。
好消息是,多次重复试验,可能发现一些其余影响因素,然而请记住,所有这些都可能会影响试验后果。
第三步 对事件提出假如
这一步,才是真正乏味的局部。
将您对系统行为的直觉,总结成一个可测验的假如——在呈现明确定义的事件时,对系统行为进行有依据的猜想。
零碎会持续工作吗?零碎性能会受到影响吗?如果会,影响水平有多少?
在现实生活中,这些问题往往是由事件引发的,大抵可分为以下几类:
类型 | 事件示例 |
---|---|
内部事件 | 地震、洪水、火灾、停电等 |
硬件故障 | 磁盘、CPU、交换机、电缆、电源等 |
资源匮乏 | CPU、物理内存、虚拟内存、磁盘空间、网络带宽等 |
软件谬误 | 死循环、解体、黑客攻击等 |
虚拟机故障 | 意外重启、意外敞开、部署失败等 |
硬件谬误 | 零碎时钟谬误、CMOS 电池生效、内存校验谬误等 |
人为谬误 | 按错按钮、发送谬误配置、拔错电缆等 |
模仿其中一些事件很容易(敞开机器以模仿机器故障,或者,插入电缆以模仿网络问题),而其余事件则要难得多(为零碎调用增加提早)。
抉择适合的故障,须要您对本人的零碎有很好的理解。
以下是一些示例假如:
- 以每小时 100 公里的速度产生侧面碰撞时,不会挤压到任何假人。
- 如果两个亲本豌豆都是黄色的,那么所有的后辈都是黄色的。
- 如果 30% 的服务器被敞开,API 会在 200 毫秒内持续为 99% 的申请提供服务。
- 如果其中一台数据库服务器呈现故障,仍将满足服务级别指标 (SLO)。
当初,是时候运行试验了。
第四步 运行试验并验证假如
最初,运行试验,观测后果,并验证假如。
请记住,假如被证伪,被打脸,一点问题没有——反而是令人兴奋的事!
- 如果假如是对的,祝贺!您刚刚对本人的零碎取得了更多信念。
- 如果假如是错的,祝贺!您刚刚在客户发现之前,提前找到了零碎问题,并且能够在任何人受到影响之前修复它!
请记住,只有这是一门好迷信,您就能够从每个试验中学到一些货色。
三、结束语
混沌工程是一门在零碎上进行试验以发现问题的学科,这些问题通常无奈被其余测试技术发现。
这就像汽车行业所做的碰撞测试,试图确保整辆汽车在实在的事件中仍能以某种形式运行一样。
而混沌工程试验旨在引入事实事件来验证对上述汽车行为的假如。
混沌工程不会主动解决您的问题。
想要提出有意义的零碎行为假如,须要您具备肯定的专业知识。
此外,混沌工程不是随机毁坏,而是事关增加可控数量的故障。
最初,混沌工程不须要很简单。
刚刚介绍的混沌试验四步骤,应该能帮忙您在事件变得更简单之前走得更远。任何规模的零碎都能够从混沌工程中受害。
起源:混沌工程实际 作者:宁远之
原文起源:Java Magazine
原文作者:Mikolaj Pawlikowski
题目:Introduction to chaos engineering, Part 2: Four steps for disrupting complex systems
申明:文章取得作者受权在 IDCF 社区公众号(devopshub)转发。优质内容共享给思否平台的技术伙伴,如原作者有其余思考请分割小编删除,致谢。
IDCF DevOps 黑客马拉松👉 9 月 11-12 日,上海站,11 月 20-21 日,深圳站,企业组队参赛 & 集体参赛均可,一年等一回,错过等一年,连忙上车~ 公众号回复“黑马”退出