混沌工程的概念由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软件测试网原创