“混沌”工程不“混乱”
作者:互联网
“混沌”工程不“混乱”
随着微服务和云原生架构的演进发展,应用系统的复杂度也愈来愈大,"随机性"的故障变得越来越难以预测,但任何一处的异常就可以导致系统全面坍塌,并且很难快速的定位故障根源, 那么如何能够在事前进行全方位的可靠性测试,就显得尤为关键,否则这些故障将给公司造成巨大损失,也会给用户带来麻烦,影响他们的正常使用。
为此,混沌工程应运而生,混沌工程是在系统上进行实验的学科, 目的是建立对系统抵御生产环境中失控条件的能力以及信心,最早由Netflix及相关团队提出。混沌工程旨在将故障扼杀在襁褓之中,也就是在故障造成中断之前将它们识别出来,通过主动制造故障,测试系统在各种压力下的行为,识别并修复故障问题,避免造成严重后果。
---------------------------------------------------------------------------------------------------------------
混沌工程简史
混沌工程最先出现在互联网巨头公司中,这些公司拥有大规模的分布式系统,因为这些系统太过复杂,他们需要一些新的手段来测试它们。
- 2010年,Netflix Eng Tools团队开发出了Chaos Monkey。当时Netflix从物理基础设施迁移到AWS上,为了保证AWS实例的故障不会给Netflix的用户体验造成影响,他们开发了这个工具,用来测试系统。
- 2011年,Simian Army诞生,在Chaos Monkey的基础上增加了故障注入模式,可以测试更多的故障场景。Netflix 认为,云的特点是冗余和容错,但没有哪个组件能够保证100%的可用性,所以他们必须设计出一种云架构,在这种架构里,个体组件的故障不会影响到整个系统。
- 2012年,Netflix在 GitHub上开源了Chaos Monkey,并声称他们“已经找到了应对主要非预期故障的解决方案。通过经常性地制造故障,我们的服务因此变得更有弹性。”
- 2014年,Netflix团队创建了一种新的角色,叫作混沌工程师。Bruce Wong 发明了这个角色,并由 Dan Woods 在 Twitter上向广大的工程社区推广。
- 2014年,Chaos Monkey的升级版本FIT诞生,实现微服务级别的故障注入。
- 2016年,混沌工程(Chaos Engineering)的概念通过《Principles Of Chaos》这本书被提出。面向失败设计也逐渐成为构建一个高可用架构产品的基本要求,混沌工程也在更多公司进行实践。
- 2017年,Chaos Monkey的3.0版本ChAP(Chaos Automation Platform)诞生,可以配合环境、监控实现部分场景的自动化演练。
- 2018年,混沌工程(Chaos Engineering)成为CNCF的一个新的技术领域。
---------------------------------------------------------------------------------------------------------------
混沌工程原则:
1)建立一个围绕稳定状态行为的假说
要关注系统的可测量输出, 而不是系统的属性。对这些输出在短时间内的度量构成了系统稳定状态的一个代理。 整个系统的吞吐量、错误率、延迟百分点等都可能是表示稳态行为的指标。 通过在实验中的系统性行为模式上的关注, 混沌工程验证了系统是否正常工作, 而不是试图验证它是如何工作的。
2)多样化真实世界的事件
混沌变量反映了现实世界中的事件。 我们可以通过潜在影响或估计频率排定这些事件的优先级。考虑与硬件故障类似的事件, 如服务器宕机、软件故障 (如错误响应) 和非故障事件 (如流量激增或伸缩事件)。 任何能够破坏稳态的事件都是混沌实验中的一个潜在变量。
3)在生产环境中运行实验
系统的行为会依据环境和流量模式都会有所不同。 由于资源使用率变化的随时可能发生, 因此通过采集实际流量是捕获请求路径的唯一可靠方法。 为了保证系统执行方式的真实性与当前部署系统的相关性, 混沌工程强烈推荐直接采用生产环境流量进行实验。
4)持续自动化运行实验
手动运行实验是劳动密集型的, 最终是不可持续的。所以我们要把实验自动化并持续运行,混沌工程要在系统中构建自动化的编排和分析。
5)最小化爆炸半径
在生产中进行试验可能会造成不必要的客户投诉。虽然对一些短期负面影响必须有一个补偿, 但混沌工程师的责任和义务是确保这些后续影响最小化且被考虑到。
---------------------------------------------------------------------------------------------------------------
混沌工程实践:
1)定义"稳定状态"
精确定义并测量系统的"稳定状态"指标,表明您的系统按照应有的方式运行。 Netflix使用客户点击视频流设备上播放按钮的速率作为指标,称为"每秒流量"。在混沌工程中,业务指标通常比技术指标更有用,因为它们更适合衡量用户体验或运营。
2)创建实验假设
与任何实验一样,您需要一个假设来进行测试。因为你试图破坏系统正常运行时的稳定状态,你的假设将是这样的,"当我们做XXX的时候,这个系统的稳定状态应该没有变化"。为什么用这种方式表达?如果你的期望是你的动作会破坏系统的稳定状态,那么你会做的第一件事会是修复问题。混沌工程应该包括真正的实验,涉及真正的未知数。
3)模拟发生事情
模拟现实世界中可能发生的事情,常用的混沌工程实践方法:模拟数据中心的故障、强制系统时钟不同步、在代码中模拟I/O异常、模拟服务之间的延迟、随机引发函数抛异常。通常,您希望模拟可能导致系统不可用或导致其性能降低的场景。一定要优先考虑潜在的错误,然后再进行模拟,当你拥有非常复杂的系统时,很容易引起出乎意料的下游效应,这是混沌工程寻找的结果之一。
4)证明反驳假设
将稳态指标与干扰注入系统后收集的指标进行比较,如果您发现测量结果存在差异,那么您的混沌工程实验已经成功,您现在可以继续加固系统,以便现实世界中的类似事件不会导致大问题。或者,如果您发现稳定状态可以保持,那么你对该系统的稳定性大可放心。
---------------------------------------------------------------------------------------------------------------
混沌工程场景
---------------------------------------------------------------------------------------------------------------
混沌工程价值:
- 客户:增强的服务可用性和持久性意味着他们的日常生活不会受到影响。
- 业务:混沌工程有助于避免公司的利润受到损失,降低维护成本,提升工程师的愉悦感和参与度,改进整个公司的事故处理流程。
- 技术:混沌工程旨在减少事故和轮班待命的负担,更好地了解系统的故障模式,改进系统设计,更快地检测到事故,减少类似事故的发生。
---------------------------------------------------------------------------------------------------------------
总结:混沌工程是一个强大的实践, 它已经在世界上一些规模最大的业务系统上改变了软件是如何设计和工程化的。 相较于其他方法解决了速度和灵活性, 混沌工程专门处理这些分布式系统中的系统不确定性。 混沌工程的原则为我们大规模的创新和给予客户他们应得的高质量的体验提供了信心。
注:文章均原创,部分图片及文字来源于网络,若涉及版权,请联系作者,将第一时间备注出处,谢谢。
标签:工程,Netflix,混沌,系统,Chaos,故障,混乱 来源: https://blog.csdn.net/weixin_44295717/article/details/111390786