=============================================================
混沌工程 =============================================================1.1.1. 混沌工程是一套通过系统基础设施上进行实验、主 动找出系统中的脆弱环节的方法学
1.1.1.1. 混沌工程可以简单到Stage环境进行简单操作
1.1.1.2. 也可以复杂到生产环境挑选小部分(流量)进行自动实验
1.1.2. 混沌工程与FIT(fault injection)的区别
1.1.2.1. FIT是测试
1.1.2.2. 混沌工程是实验,结果未知
1.1.3. 实施前提条件
1.1.3.1. 是否已经具备了一定弹性来应对真实环境中的异常事件
1.1.3.2. 配套监控系统,用于判断系统当前各种状态,以得出有效结论
1.1.4. 管理复杂性
1.1.4.1. 软件复杂性4维:性能、可用性、容错及新功能开发速度
1.1.4.2. Netflix 小团队特点:松散耦合和高度协调(每个人都能看的更全面,从而明确他们的工作是如何有助于和其它团队一起实现更大的目标)
1.1.4.3. 牛鞭效应:输入中的一点扰动会触发一个自我强化的循环,最终导致输出结果的剧烈波动
1.2.1. 建立稳定状态的假设
1.2.1.1. 基于所期望的业务指标来描述系统的稳定状态
1.2.1.2. 在定义稳定状态时候要把客户和服务之间的SLA纳入考量范围
1.2.1.3. 业务指标考量
1.2.1.3.1. 指标和底层架构的关系 1.2.1.3.2. 收集相关数据需要的工作量 1.2.1.3.3. 指标和系统接下来的行为之间的时间延迟1.2.1.4. 基于指标模型进行实验假设
1.2.1.4.1. 建立稳定偏差范围1.2.1.5. 基于金丝雀发布,对发布范围进行稳定性分析:金丝雀分析
1.2.2. 用多样的现实世界事件做验证
1.2.2.1. 常见事件类别
1.2.2.1.1. 硬件故障 1.2.2.1.2. 功能缺陷 1.2.2.1.3. 状态转换异常 1.2.2.1.4. 网络延迟和分区 1.2.2.1.5. 上行或者下行输入的大幅波动及重试风暴 1.2.2.1.6. 资源耗尽 1.2.2.1.7. 服务之间不正常或者预料之外的组合调用 1.2.2.1.8. 拜占庭故障 1.2.2.1.9. 资源竞争条件 1.2.2.1.10. 下游依赖故障1.2.2.2. 故障域
1.2.2.2.1. 一个故障的影响范围和隔离范围被称为这个故障的故障域 1.2.2.2.2. 发现和验证故障域才能确保满足产品的可用性预期1.2.2.3. 注入的事件必须是可以处理的,也是真实的
1.2.3. 在生产环境中进行实验
1.2.3.1. 控制对生产的影响
1.2.3.1.1. 可以快速终止实验 1.2.3.1.2. 控制最小爆炸半径1.2.4. 自动化实验以持续运行
1.2.5. 最小化爆炸半径
1.3.1. 选定假设
1.3.2. 设定实验范围
1.3.3. 识别出要监控的指标
1.3.4. 在组织内沟通到位
1.3.5. 执行实验
1.3.6. 扩大实验范围
1.3.7. 自动化实验
1.4.1. https://github.com/wizardbyron/principlesofchaos_zh-cn
1.4.2. https://github.com/linkedin/simoorg 最后更新2015年
1.4.3. https://github.com/alexei-led/pumba
1.4.3.1. 网络异常及容器异常测试
1.4.4. Chaos Lambda is a serverless implementation of Netflix’s Chaos Monkey. 只能用于AWS,最后更新2017
1.4.4.1. https://github.com/artilleryio/chaos-lambda
1.4.5. Blockade is a utility for testing network failures and partitions in distributed applications. Blockade uses Docker containers:https://github.com/worstcase/blockade 最后更新2019-4
1.4.5.1. https://blockade.readthedocs.io/en/latest/
1.4.6. Introduce failures into HTTP requests :https://github.com/bouncestorage/chaos-http-prox
1.4.7. https://medium.com/@NetflixTechBlog
