混沌工程

混沌工程

  • 介绍

混沌工程是提高分布式系统的稳定性,而进行的一种故障演练测试;具体的方式是向系统注入故障,对比系统稳定时和注入故障后的指标变化;进而评估系统的稳定性和容错能力;

  • 目录
1
2
3
4
混沌工程是什么
为什么要做混沌工程,应用场景
怎么样进行混沌工程
长期规划
  • 混沌工程是什么?

    混沌工程本质是一种故障演练,通过向系统注入故障的方式,来发现问题,从而提升系统的稳定性;

  • 为什么要做混沌工程,混沌工程的价值?

    由于商业软件,基本都是分布式架构,随着用户的增加,架构的节点也越来越多,越来越复炸;复杂系统很容易由于系统中的一些故障,比如节点挂了,redis挂了,消息队列杜塞,硬盘满了,等问题导致系统能力下降;因此我们需要通过模拟故障的方式来碰撞系统,及早发现问题,减少线上风险;

  • 怎么样进行混沌工程?

    • 分四步进行
    1
    2
    3
    4
    先找到一个稳定状态,然后确定稳定态的指标	
    确定需覆盖的异常场景,构造异常去碰撞系统
    记录系统被碰撞后,相应的指标
    将异常态指标和稳定态指标进行对比,分析系统能力是否下降,若下降则代表这个故障未做兼容,需要进行处理
  • 如何确定稳定态,如何选取指标?

    1、一般是参考线上的稳定状态,作为稳定态;稳定态时,需要选取业务指标和系统指标;具体指标的选取要 基于业务特征来进行,比如我们的产品是一款音乐app,用户使用最多的就是音乐播放,音乐下载;影响较大的 是新增用户量,用户活跃度;

    2、因此我们在选取业务指标时,考虑选取:故障态和稳定态下的,音乐播放数/音乐下载数/听歌人数/新增用 户数/用户留存率/用户的活跃度作为业务指标;

    3、在确定系统指标时,我们需要具体分析,碰撞的故障,可能影响系统的指标和相应的节点,来监控相应指 标的变化;同时需要分析这种变化对系统业务的影响;

  • 如何确定碰撞的异常场景,如何进行碰撞?

    • 异常场景的确认一般是有两种途径;分析系统特征来提取可能的故障/利用线上历史的故障,常见故障有:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      CPU 高负载
      磁盘高负载:频繁读写磁盘
      磁盘空间不足
      优雅的下线应用:使用应用的 stop 脚本平滑的停止应用
      通过 kill 进程直接停止应用,可能造成数据不一致
      网络恶化:随机改变一些包数据,使数据内容不正确
      网络延迟:将包延迟一个特定范围的时间
      网络丢包:构造一个 tcp 不会完全失败的丢包率
      网络黑洞:忽略来自某个 ip 的包
      外部服务不可达:将外部服务的域名指向本地环回地址或将访问外部服务的端口的 OUTPUT 数据包丢弃
    • 由于混沌工程是对系统健壮性进行的测试,因此需保证系统的真实性,最好利用线上的系统来进行

      1、利用线上系统进行混沌工程,需保证系统节点的容量可调度,可控;选取较小可控的节点来进行混沌 工程; 2、进行混沌工程需保证影响可控,可恢复;要保证对线上的业务无影响;

  • 进行混沌工程的主流工具

    大厂基本都有自研的混沌工程的工具,现在国内开源的工具热度最高的是:

    阿里的chaosblade

    云原生计算基金会托管的Chaos Mesh

    混沌工程相关的资料–AWS

欢迎关注我的其它发布渠道