背景
- 私有云/公有云/混合云等具有复杂,分布式,环境多样性等特点,许多特殊场景引发的线上问题很难被有效发现。所以需要引入混沌工程,建立对系统抵御生产环境中失控条件的能力以及信心,提高系统面对未知风险得能力。
目标
- 帮助测试/研发/运维工程师提前发现各种异常场景引发的问题;
- 持续进行故障演练,暴露系统问题,提升产研对质量的信心;
- 全场景,便捷的故障注入方式,使其与研发流程更紧密结合,发挥更大价值;
什么是混沌工程?
混沌工程是一种通过主动制造故障场景并根据系统在各种压力下的行为表现确定优化策略的系统稳定性保障手段。简单来说,混沌工程通过主动注入故障的方式,提前发现问题并解决问题,从而规避风险
混沌工程的核心概念
混沌工程的核心在于通过模拟生产环境中的各种极端情况,如硬件故障、网络延迟、资源耗尽等,来测试系统的稳定性和可靠性。通过这些实验,可以暴露系统中的薄弱环节,并采取措施进行优化。
原则
建立一个围绕稳定状态行为的假说
“稳定状态”是指系统正常运行时的状态。具体来说,系统的稳定状态可以通过一些指标来定义,当系统指标在测试完成后,无法快速恢复稳态要求,可以认为这个系统是不稳定的。
- 系统指标:CPU 负载、内存使用情况、网络 I/O等
- 业务指标:吞吐率,错误率,p99延迟,数据一致性,消息触达准确性,时效性等
因此需要建立稳定状态行为模型
复杂多变的系统运行环境
只要运行时间足够长,都会受到不可预测的事件和条件的影响。
基于这些情况:
- 需要建立业务系统的故障模型
故障分级
故障等级:P0,P1,P2
故障等级=故障发生概率*故障发生影响
在生产环境中运行实验
越接近生产环境,对实验结果的信心就越足。
持续自动化运行实验
系统不断变化,越来越复杂,手动执行,难以长久持续。需要通过自动化来降低实验成本,并定期执行。
- 固化典型混沌场景
- 自动化进行结果分析
- 降低创建新实验的门槛
怎么做:
- 混沌场景梳理
- 自动化工具&平台调研
最小化爆炸半径
暴露薄弱环节而不会意外造成更大规模的故障。
- 范围可控
- 随时停止实验并消除影响
步骤
- 选择一个假设
- 选择试验的范围
- 明确需要观察的 metric 指标
- 通知相关的团队
- 执行试验
- 分析结果
- 增大试验的范围
- 自动化
- 成熟度
复杂度
接受度
分产品混沌场景
梳理产品维度混沌场景,多用于多业务线合作的方式,开放自己的组件或基础服务时,需要先保障自己服务依赖的其他服务/系统/服务器得一些异常尽可能对自身造成最低的影响,以及当依赖服务/资源恢复时,自身可以主动进行服务恢复/数据同步/数据校验等
自动化平台方案
chaosblade
自研命令行工具自动化
企业内部演进
常见混沌场景
混沌异常场景来源于两类,梳理了常见异常,只做举例,大家参考
- 资源类
- 组件&服务类
资源类