文章详情

SRE 所需要的‘混沌工程’

 二维码

概述

混沌工程(Chaos Engineering)


1.jpg


混沌工程是一种在分布式计算系统中测试和增强系统弹性的方法。其核心理念是:有意的在生产环境中引入故障,观察系统会如何响应,并从中学习以增强系统的健壮性。混沌工程通过在受控的实验中模拟各种潜在的故障,如服务器宕机、网络延迟、服务崩溃等,来验证系统是否能够在异常情况下保持正常运行或快速恢复。


混沌猴(Chaos Monkey)


“两会时间”即将开启4.jpg


混沌猴是混沌工程中的一个具体工具,由 Netflix 开发。它会随机关闭生产环境中的实例或服务,以测试和确保应用程序在意外故障情况下仍能保持稳定和高可用性。通过使用混沌猴,开发团队可以发现系统中的弱点,进而增强系统的容错能力和弹性。


混沌猴是 Netflix 开发的一系列工具中的一部分,用于测试系统的弹性。除了最初的混沌猴之外,Netflix 还开发了其他几种“猴子”,它们分别负责不同类型的混沌测试。这些工具统称为 Simian Army。以下是几种常见的混沌猴:



“两会时间”即将开启4.jpg


1. Chaos Monkey 混沌猴:随机关闭生产环境中的实例或服务,测试系统在这些情况下的稳定性和恢复能力。


2. Latency Monkey 延迟猴:引入网络延迟,测试系统在网络延迟情况下的性能和响应能力。


3. Conformity Monkey 确认猴:检查云资源是否符合最佳实践和规定的配置标准,如果发现不符合项则自动进行修复。


4. Doctor Monkey 猴子医生:监控系统健康状况,发现问题实例并将其隔离或重启,确保系统的健康和可用性。


5. Janitor Monkey 猴子保洁:清理不再需要的资源,如过期的备份和孤立的存储卷,确保资源的有效利用和成本控制。


6. Security Monkey 安全猴:检查系统的安全性漏洞,如不安全的安全组设置,确保系统的安全性。


7. Chaos Gorilla 混沌大猩猩:模拟更大范围的故障,如整个可用区的宕机,测试系统在重大故障情况下的弹性和恢复能力。


这些工具共同作用,通过模拟各种故障和异常情况,帮助开发团队识别和修复系统中的弱点,提高系统的弹性和可靠性。


这些工具和方法帮助团队在生产环境中预防和处理意外故障,从而提高系统的可靠性和稳定性。

混沌原则


混沌工程是在系统上进行实验的学科, 目的是建立对系统抵御生产环境中失控条件的能力以及信心。


大规模分布式软件系统的发展正在改变软件工程。作为一个行业,我们很快采用了提高开发灵活性和部署速度的实践。紧随着这些优点的一个迫切问题是:我们对投入生产的复杂系统有多少信心?


即使分布式系统中的所有单个服务都正常运行, 这些服务之间的交互也会导致不可预知的结果。 这些不可预知的结果, 由影响生产环境的罕见且破坏性的事件复合而成,令这些分布式系统存在内在的混沌。


我们需要在异常行为出现之前,在整个系统内找出这些弱点。这些弱点包括以下形式:


· 当服务不可用时的不正确回滚设置;


· 不当的超时设置导致的重试风暴;


· 由于下游依赖的流量过载导致的服务中断;


· 单点故障时的级联失败等。


我们必须主动的发现这些重要的弱点,在这些弱点通过生产环境暴露给我们的用户之前。我们需要一种方法来管理这些系统固有的混沌, 通过增加的灵活性和速率以提升我们对生产环境部署的信心, 尽管系统的复杂性是由这些部署所导致的。


我们采用基于经验和系统的方法解决了分布式系统在规模增长时引发的问题, 并以此建立对系统抵御这些事件的能力和信心。通过在受控实验中观察分布式系统的行为来了解它的特性,我们称之为混沌工程。


混沌工程实践


为了具体地解决分布式系统在规模上的不确定性,可以把混沌工程看作是为了揭示系统弱点而进行的实验。这些实验遵循四个步骤:


1. 首先,用系统在正常行为下的一些可测量的输出来定义“稳定状态”。


2. 其次,假设控制组和实验组都能保持这种稳定状态。


3. 然后,在实验组中引入反映真实世界事件的变量,如服务器崩溃、硬盘故障、网络连接断开等。


4. 最后,通过控制组和实验组之间的状态差异来反驳稳定状态的假说。


破坏稳态的难度越大,我们对系统行为的信心就越强。如果发现了一个弱点,那么我们就有了一个改进目标。避免在系统规模化之后被放大。


高级原则


以下原则描述了应用混沌工程的理想方式,这些原则基于上述实验过程。对这些原则的匹配程度能够增强我们在大规模分布式系统的信心。


建立一个围绕稳定状态行为的假说


要关注系统的可测量输出, 而不是系统的属性。对这些输出在短时间内的度量构成了系统稳定状态的一个代理。 整个系统的吞吐量、错误率、延迟百分点等都可能是表示稳态行为的指标。 通过在实验中的系统性行为模式上的关注, 混沌工程验证了系统是否正常工作, 而不是试图验证它是如何工作的。


多样化真实世界的事件


混沌变量反映了现实世界中的事件。 我们可以通过潜在影响或估计频率排定这些事件的优先级。考虑与硬件故障类似的事件, 如服务器宕机、软件故障 (如错误响应) 和非故障事件 (如流量激增或伸缩事件)。 任何能够破坏稳态的事件都是混沌实验中的一个潜在变量。


在生产环境中运行实验


系统的行为会依据环境和流量模式都会有所不同。 由于资源使用率变化的随时可能发生, 因此通过采集实际流量是捕获请求路径的唯一可靠方法。 为了保证系统执行方式的真实性与当前部署系统的相关性, 混沌工程强烈推荐直接采用生产环境流量进行实验。


持续自动化运行实验


手动运行实验是劳动密集型的, 最终是不可持续的。所以我们要把实验自动化并持续运行,混沌工程要在系统中构建自动化的编排和分析。


最小化爆炸半径


在生产中进行试验可能会造成不必要的客户投诉。虽然应该允许一些短期的负面影响, 但混沌工程师的责任和义务是确保这些后续影响最小化且被考虑到。


混沌工程是一个强大的实践, 它已经在世界上一些规模最大的业务系统上改变了软件是如何设计和工程化的。 相较于其他方法解决了速度和灵活性, 混沌工程专门处理这些分布式系统中的系统不确定性。 混沌工程的原则为我们大规模的创新和给予客户他们应得的高质量的体验提供了信心。


文章分类: 行业资讯
分享到:
Yn.Sun@harmonsw.net
———————————————————————————————————————————————————————————————————————————————————————————
工作时间:09:00—18:00
联系电话:400-660-5600
北京市西城区
鸿雪科技官方公众号
数说有理视频号
京ICP备2020041573号-4
北京鸿雪信息科技有限公司

  ©2022 harmonsw.com 版权所有

会员登录
登录
其他账号登录:
我的资料
留言
回到顶部