美文网首页
混沌工程

混沌工程

作者: Tommy1989 | 来源:发表于2021-05-29 21:38 被阅读0次

    定义

    混沌工程是一种可试验的、基于系统的方法来处理大规模分布式系统中的混乱问题。通过不断试验,了解系统的实际能承受的韧性边界并建立信心,通过不同的试验方法和目的,观察分布式系统的行为和反应。一句话:以实验的方法尽早揭露系统弱点

    混沌工程与传统测试的区别

    • 在测试中,进行断言:给定特定条件,系统将发出特定输出。测试通常是二进制态的,并确定属性是真还是假。严格地说,这不会产生关于系统的新知识,它只是将效价分配给它的已知属性。
    • 实验产生新知识,并经常提出新的探索途径。我们认为混沌工程是一种实验形式,可以产生关于系统的新知识。它不仅仅是一种测试已知属性的方法,可以通过集成测试更轻松地进行验证。

    故事

    在给大家正式介绍之前,先给大家说个小故事,阿波罗13号在发射前进行的一次测试中,2号氧气罐的氧气始终无法彻底排空。控制人员决定启动罐内的加热器,排出剩余氧气。这个操作需要接通65伏的电源,但氧气罐内的电路一开始的设计电压是28伏。在8小时的加热后,靠近加热器的导线温度一度达到了538度,导线的绝缘层被破坏。在太空中,这段导线短路,点燃了绝缘层,引发了爆炸。

    image.png

    软件开发中的问题

    在日常开发运维工作中,如果你不能提早发现和解决问题,最后问题会在周末/半夜来“解决你”.


    image.png

    系统架构的演进

    从系统架构的本质演进中是由脆弱的系统,慢慢演进,逐步增强,最终变的越加智能化,成为一个反脆弱系统。

    • 脆弱系统:难以修改,许多阻止拥有无法更改的应用程序,维护成本非常高,但是由于他们对业务至关重要,因此仍然运行。
    • 健壮系统:可承受一定程度的压力而不会失去其给您,但是如果压力和变化继续,则该系统可能会带来损失。
    • 韧性系统:在设计和实现时考虑到压力和适应性特征,从而应对更大的压力和变化,并最大程度的提供价值。
    • 反脆弱系统:是一个智能系统,架构复杂有难度,但是一旦建立起来,降机遇变更来驱动业务,甚至能提供创新变更。


      image.png

    混沌过程的演进

    image.png

    2010年 Netflix 内部开发了 AWS 云上随机终止 EC2 实例的混沌实验工具: Chaos Monkey
    2011年 Netflix 释出了其猴子军团工具集: Simian Army
    2012年 Netflix 向社区开源由 Java 构建 Simian Army,其中包括 Chaos Monkey V1 版本
    2014年 Netflix 开始正式公开招聘 Chaos Engineer
    2014年 Netflix 提出了故障注入测试(FIT),利用微服务架构的特性,控制混沌实验的爆炸半径
    2015年 Netflix 释出 Chaos Kong ,模拟AWS区域(Region)中断的场景
    2015年 Netflix 和社区正式提出混沌工程的指导思想 – Principles of Chaos Engineering
    2016年 Kolton Andrus(前 Netflix 和 Amazon Chaos Engineer )创立了 Gremlin ,正式将混沌实验工具商用化
    2017年 Netflix 开源 Chaos Monkey 由 Golang 重构的 V2 版本,必须集成 CD 工具 Spinnaker 来使用
    2017年 Netflix 释出 ChAP (混沌实验自动平台),可视为应用故障注入测试(FIT)的加强版
    2017年 由Netflix 前混沌工程师撰写的新书“混沌工程”在网上出版
    2017年 Russell Miles 创立了 ChaosIQ 公司,并开源了 chaostoolkit 混沌实验框架

    混沌工程的原则

    建立稳定状态的假设

    • 确定监控指标
    • 假设注入事件,系统依然稳定

    在一个复杂系统里面,我们有特别多的组件,有很多不同的输入输出,我们需要有一个通用的方式来区别系统哪些行为是可以接受的,而哪一些则是不合适的。我们可以认为当系统处于正常操作时候的状态就是稳定状态。

    多样化现实世界事件

    • 根据现实世界设定事件
    • 注入事件是被认为系统可以处理的事件
    • 优先注入那些频繁发生且影响重大的事件
    image.png

    在生产环境运行

    • 混沌工程实验离生产越近越好

    从功能性的故障测试角度来看,非生产环境去实施故障注入是可以满足预期的,不过因为系统行为会根据环境和流量模式有所不同,为了保证系统执行方式的真实性与当前部署系统的相关性,推荐的实施方式还是在生产环境(仿真环境、沙箱环境都不是最好的选择)

    很多同学恐惧在生产环境执行实验,原因还是担心故障影响不可控。实施实验只是手段,通过实验对系统建立信心是我们的目标。关于如何减少实验带来的影响,这点在“最小化爆炸半径”部分会有阐述。
    并且混沌工程不是一开始就建议你在生产环境运行,也是循序渐进,从测试环境开始,慢慢过渡的到sandbox,最后在生产环境运行试验。

    持续自动化运行实验

    • 自动执行实验
    • 自动分析实验结果
    • 自动创建新的实验

    实验的手动运行工作属于劳动力密集型任务,因此难以长久持续。建议采取自动化实验及持续运行方式。混沌工程能够将自动化系统引入系统之内,从而促进协调与分析工作的顺利进行。

    最小化影响范围

    • 对线上业务影响最小范围
    • 先小范围,在不断扩大
    • 避免在高风险时间段运行

    最小化爆炸半径,尽量减少对用户的影响,最好能控制到用户基本,或者请求基本,这样对线上基本就没有什么损失,高层的接受度也会很高,减少故障对产线业务的影响。

    image.png

    混沌工程实验步骤

    image.png

    混沌工程的成熟度模型

    image.png

    混沌工程的接纳指数

    image.png

    混沌工程的价值

    1.架构师对当前设计的架构,可以通过混沌工程进行验证
    2.开发和运维的可以用混沌工程来提高自己对线上Case处理的演练,提升经验
    3.测试可以在利用混沌工程提早暴露一些线上的问题,降低故障复发率,转化被动为主动
    4.UI可以在出现这些问题时,界面的反馈,产品不显示,产品对用户的体验度是怎么样的,可以接受与否等

    混沌工程的回报率

    引用自Netflix
    过去一年中,混沌工程提前发现了2次大故障和8次小故障,避免了整个组织大约70万美金的损失。混沌工程团队,总共3个成员,薪水支出15万美金/人。开展混沌工程实验,本身需要1万美金的成本。请问,投资回报率是多少?

    image.png

    相关文章

      网友评论

          本文标题:混沌工程

          本文链接:https://www.haomeiwen.com/subject/nwsusltx.html