51Testing软件测试论坛

标题: 初探混沌实验工具chaosblade [打印本页]

作者: lsekfe    时间: 2021-3-24 09:48
标题: 初探混沌实验工具chaosblade
 混沌工程的概念由Netflix最先提出,指“在分布式系统上进行实验的学科,目的是建立对系统承受生产环境中湍流条件能力的信心”。随着分布式系统的建设,单体应用迁移到分布式架构中,对系统的可靠性和容错性提出了更高的要求。为防止服务因为微小故障而产生雪崩效应,引发系统大面积崩溃,通过在分布式系统上进行受控实验,观察系统行为并及时发现问题,提升系统健壮程度。
  Chaosblade是由阿里巴巴研发的开源混沌工程工具,用于模拟常见的故障场景。本文使用Ubuntu虚拟机和docker探索该工具的准备过程及部分常见故障的使用方法。

  一、工具获取
  Chaosblade工具有两种获取方法,可以从Github仓库中下载发布的完整工具并解压使用,也可以通过docker拉取镜像。第一种方法只需下载压缩包,解压后在对应目录下使用 ./blade命令即可使用,无需额外准备步骤,十分简洁易用。如果只是想体验工具,可以采用第二种方式,在体验完成后销毁docker容器,不用担心测试环境受到破坏。
  通过docker拉取blade工具镜像:


  启动镜像:


  二、创建混沌实验
  Chaosblade工具目前支持基础资源类(如CPU、内存、网络、磁盘等场景)、Java应用类(如JVM、消息、缓存等场景)、云原生平台(如Kubernetes平台、Pod网络等场景)等多种类型的实验场景。使用blade create命令可以创建实验,后面根据需要加上实验类型和需要的参数设置即可。

  1.CPU负载实验
  下面我们先启动一个CPU满负载的实验,并设置了20秒的时长,到达时长后实验自动销毁。运行时长为可选参数,不指定时则会持续运行。同时,也可以增加-count、-percent等命令指定负载的CPU个数和百分比。
  可以看到实验启动成功后,返回信息包含三部分,其中的code值为200时代表启动成功,result的值为一个uid。每个实验对应一个独立的uid,可以通过该id查询和销毁实验。


  启动成功后我们使用top命令查看设备负载情况,可以看到出现chaos_burncpu进程并占用了88%的CPU资源。


  到达20秒时长后实验自动销毁,再次查看负载情况已经回归正常。


  2.网络故障实验
  由于只用了一台虚拟机使用工具,所以在实验前我们先新建一个docker容器,并在容器中运行nginx。建立了该容器49153端口到本地80端口的网络映射。这样我们就可以添加对本地80端口的网络故障实验,并通过访问容器的49153端口测试实验效果,模拟访问远程服务器。
  实验前检查容器端口的映射情况,以及通过curl命令访问49153端口的测试。这里选择curl替代telnet的原因是telnet命令会自动进行重连尝试,影响观察实验结果。


  此处创建了一个网络延迟实验,对本地80端口添加2秒的网络延迟。


  之后通过Curl命令检查端口延迟,可以看到由于涉及请求和响应两个步骤,整个过程使用了4秒的时间。


  由于此次未设置运行时间,实验结束后使用destroy命令通过uid销毁实验。


  再次检查,响应时间已经恢复正常。


  接下来我们再创建一个网络丢包实验,对本地80端口添加100%的丢包率。


  实验创建成功后可以看到通过telnet和curl命令都无法继续访问49153端口,模拟了网络丢包,无法正常访问的场景。


  通过对Chaosblade工具的简单探索,发现该工具功能十分强大,常见的资源类故障场景均可创建实验覆盖。可以用来模拟分布式系统中某些模块服务异常、网络闪断等运行中可能出现的异常场景,对监控告警、故障响应等措施是否及时有效的可靠性测试提供支持。





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2