混沌工程之资源瓶颈

2022-12-03 12:12:46 浏览数 (1)

在混沌工程中数据库调用延迟中详细的介绍了混沌工程的原则以及混沌工程实验的方法论和核心思考点,以及混沌工程需要解决的问题,下面使用混沌工程的方式来模拟系统资源,主要是模拟当系统的CPU和内存都出现负载的情况下,那么这个时候系统资源出现瓶颈的情况下,云服务器中部署的服务这个时候如何来进行很好的切换到新的服务实例。

CPU负载实验

下面详细的模拟下CPU负载这部分,它的场景是客户端在对访问端持续的高并发请求下,此时导致服务端的CPU资源处于高负载的情况下,那么在这样的一个场景下,当部署服务的云服务器的CPU在高负载下,服务是否能很好的接收来自客户端的请求以及回应客户端的请求,还是会出现TimeOut的情况。未模拟CPU高负载之前系统的资源具体如下图所示。

下来模拟CPU的高负载情况,使用到的命令具体如下:

代码语言:javascript复制
[root@k8s-node1 ~]# blade  create cpu fullload 
{"code":200,"success":true,"result":"11a6ae2eb271df61"}

如上显示模拟成功,再查看系统的CPU一直处于高负载的状态,系统资源如下图所示。

如上可以看到系统的CPU使用率达到了100%,平均负载也是呈上升的趋势,那么此时来验证具体的服务和服务是否能够切换到新的服务实例。实验结束后,需要销毁实验的场景,销毁的过程以及命令具体如下:

代码语言:javascript复制
[root@k8s-node1 ~]# blade destroy 11a6ae2eb271df61
{"code":200,"success":true,"result":{"target":"cpu","action":"fullload","ActionProcessHang":false}}

如上显示销毁后返回的结果信息,销毁后,系统的CPU以及平均负载就会恢复到一个正常的状态。针对CPU的高负载这种情况,最好在资源出现高负载的时候触发报警,也在服务启动的时候增加预热环节。

内存负载实验

内存负载和CPU的负载基本是一样的场景和实验的目的,所以下面直接模拟内存的高负载,实验模拟内存高负载命令如下:

代码语言:javascript复制
[root@k8s-node1 ~]#  blade create mem load  --mem-percent 100
{"code":200,"success":true,"result":"bd5c3d39a86af435"}

如上模拟内存占到100%,执行成功后,查看内存的使用情况,具体如下:

代码语言:javascript复制
[root@k8s-node1 ~]# free -h 
              total        used        free      shared  buff/cache   available
Mem:           3.7G        699M        2.4G         45M        668M        2.7G
Swap:            0B          0B          0B

查看监控平台,显示系统资源中内存资源具体如下:

如上所示,系统资源中内存资源处于高负载的情况。实验结束后就需要销毁实验。

模拟网络丢包实验

下来模拟网络丢包的情况,如果网络出现严重的故障情况,就会导致该服务器上部署的服务都请求不通的情况。下面具体的模拟下网络丢包的情况,实验的命令如下:

代码语言:javascript复制
[root@k8s-node1 ~]# blade create network loss --percent 90 --interface eth0 --local-port 5000
{"code":200,"success":true,"result":"fc35a74e14ad63a1"}

此时请求5000端口的服务,一直处于加载中,具体如下:

销毁实验后再访问,能够很快速的得到服务端的响应,具体如下:

代码语言:javascript复制
[root@k8s-node1 ~]# blade destroy fc35a74e14ad63a1
{"code":200,"success":true,"result":{"target":"network","action":"loss","flags":{"interface":"eth0","local-port":"5000","percent":"90"},"ActionProcessHang":false}}

再次PostMan请求,可以看到很快速的响应,具体如下:

针对网络丢包导致服务访问一直属于加载,一方面可以触发报警,第二方面是快速的切换到新的服务实例,这样就不会影响到服务的业务使用。

如上通过混沌工程的工具实验了CPU,内存以及网络丢包的异常情况,这些情况都是需要在服务端测试下稳定性测试需要考虑的一部分,需要思考在出现这些问题的时候解决的方案和解决的思路是什么。感谢您的阅读,后续持续更新!

0 人点赞