混沌工程
- 介绍
混沌工程是提高分布式系统的稳定性,而进行的一种故障演练测试;具体的方式是向系统注入故障,对比系统稳定时和注入故障后的指标变化;进而评估系统的稳定性和容错能力;
- 目录
1 | 混沌工程是什么 |
混沌工程是什么?
混沌工程本质是一种故障演练,通过向系统注入故障的方式,来发现问题,从而提升系统的稳定性;
为什么要做混沌工程,混沌工程的价值?
由于商业软件,基本都是分布式架构,随着用户的增加,架构的节点也越来越多,越来越复炸;复杂系统很容易由于系统中的一些故障,比如节点挂了,redis挂了,消息队列杜塞,硬盘满了,等问题导致系统能力下降;因此我们需要通过模拟故障的方式来碰撞系统,及早发现问题,减少线上风险;
怎么样进行混沌工程?
- 分四步进行
1
2
3
4先找到一个稳定状态,然后确定稳定态的指标
确定需覆盖的异常场景,构造异常去碰撞系统
记录系统被碰撞后,相应的指标
将异常态指标和稳定态指标进行对比,分析系统能力是否下降,若下降则代表这个故障未做兼容,需要进行处理如何确定稳定态,如何选取指标?
1、一般是参考线上的稳定状态,作为稳定态;稳定态时,需要选取业务指标和系统指标;具体指标的选取要 基于业务特征来进行,比如我们的产品是一款音乐app,用户使用最多的就是音乐播放,音乐下载;影响较大的 是新增用户量,用户活跃度;
2、因此我们在选取业务指标时,考虑选取:故障态和稳定态下的,音乐播放数/音乐下载数/听歌人数/新增用 户数/用户留存率/用户的活跃度作为业务指标;
3、在确定系统指标时,我们需要具体分析,碰撞的故障,可能影响系统的指标和相应的节点,来监控相应指 标的变化;同时需要分析这种变化对系统业务的影响;
如何确定碰撞的异常场景,如何进行碰撞?
异常场景的确认一般是有两种途径;分析系统特征来提取可能的故障/利用线上历史的故障,常见故障有:
1
2
3
4
5
6
7
8
9
10CPU 高负载
磁盘高负载:频繁读写磁盘
磁盘空间不足
优雅的下线应用:使用应用的 stop 脚本平滑的停止应用
通过 kill 进程直接停止应用,可能造成数据不一致
网络恶化:随机改变一些包数据,使数据内容不正确
网络延迟:将包延迟一个特定范围的时间
网络丢包:构造一个 tcp 不会完全失败的丢包率
网络黑洞:忽略来自某个 ip 的包
外部服务不可达:将外部服务的域名指向本地环回地址或将访问外部服务的端口的 OUTPUT 数据包丢弃由于混沌工程是对系统健壮性进行的测试,因此需保证系统的真实性,最好利用线上的系统来进行
1、利用线上系统进行混沌工程,需保证系统节点的容量可调度,可控;选取较小可控的节点来进行混沌 工程; 2、进行混沌工程需保证影响可控,可恢复;要保证对线上的业务无影响;
进行混沌工程的主流工具
大厂基本都有自研的混沌工程的工具,现在国内开源的工具热度最高的是: