混沌工程之ChaosBlade(二):原理深度剖析

本文深入探讨混沌工程工具ChaosBlade的项目结构,包括chaosblade-exec-os、chaosblade-exec-docker及其执行原理,如CPU Load、Mem Load、Disk Filled等场景的实现。此外,文章还介绍了sidecar模式和jvm场景,以及ChaosBlade如何利用Java字节码增强技术进行混沌实验。
摘要由CSDN通过智能技术生成

本系列文章的目标,是将混沌工程作为一个入口,窥探整个分布式系统。

混沌工程之ChaosBlade(一):建立混沌工程思想
混沌工程之ChaosBlade(二):原理深度剖析

一、项目剖析

1.场景调用
chaosblade-exec-os作为基础执行场景被各模块调用,而chaosblade-spec-go中包含yaml文件,用于场景匹配。chaosblade-exec-docker基于chaosblade-exec-os实现,chaosblade-operator又依赖chaosblade-exec-docker实现。
jvm场景与cpp场景则属于单独构造的场景,其中jvm场景使用Java字节码增强技术实现。
(注:该图片源于《chaosblade项目介绍-穹谷.ppt》)
项目场景关系图
2.chaosblade-sepc-go
按实验模型定义了实验场景类型,也包含通用的工具类和本地命令调用通道。
(注:该图片源于《chaosblade项目介绍-穹谷.ppt》)
go
3.chaosblade-exec-os
由下图可见,chaosblade-exec-os文件夹的代码目录,每个文件中的go文件定义了实验场景的执行实现。这些文件是基础资源场景的故障注入实现,高级场景会调用这些实现。
exec-os目录
4.chaosblade-exec-docker
其中executor_execin.go是将chaosblade整个文件拷入容器中执行相关命令,exector_sidecar.go则是以sidecar模式执行。
(注:该图片源于《chaosblade项目介绍-穹谷.ppt》)
在这里插入图片描述
5.chaosblade-exec-operator
(注:该图片源于《chaosblade项目介绍-穹谷.ppt》)
在这里插入图片描述

6.chaosblade-jvm
基于java字节码增强技术。
(注:该图片源于《chaosblade项目介绍-穹谷.ppt》)
在这里插入图片描述

二、原理剖析

  1. CPU Load

在执行CPU负载命令时,实际调用了/bin/burn_cpu,blade可执行文件调用了Cobra接口注入了故障。

Cobra 是一个 Golang 包,它提供了简单的接口来创建命令行程序。同时,Cobra 也是一个应用程序,用来生成应用框架,从而开发以 Cobra 为基础的应用.

要分析注入原理,需引入一个概念:时间片(timeslice)。
根据Wikipedia上的解释,CPU Time分为:

  • User Time:在用户空间中执行代码的总时间;
  • System Time:在内核空间(kernel space)中执行代码的总时间;
  • Idle Time:指所有空间中CPU处于空闲状态的总时间;
  • Steal Time:在虚拟硬件中,操作系统要执行但系统管理程序不允许的时间;

Chaosblade中,将CPU分为了busy和idle状态,根据代码,它使用runtime.Gosched()让出CPU时间片后,让CPU一直处于繁忙状态。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。

func burnCpu() {
   
	runtime.GOMAXPROCS(cpuCount)

	for i := 0; i < cpuCount; i++ {
   
		go func() {
   
			for {
   
				for i := 0; i < 2147483647; i++ {
   
				}
				runtime.Gosched()
			}
		}()
	}
	select {
   } /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值