标签:dubbo drop tag ice proc 错误 png api off
ChaosBlade 是一款遵循混沌工程实验原理,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具,可实现底层故障的注入,特点是操作简洁、无侵入、扩展性强。
目前我涉及到业务线引入此工具的目的就在于优化原有的故障植入方式,并扩展一些新的植入场景,如dubbo服务异常,mysql操作,网络异常,特定方法异常等。
项目地址:https://github.com/chaosblade-io/chaosblade/wiki/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97
从其cli工具的help中,可以看出ChaosBlade目前支持的一些能力
cpu Cpu experiment
disk Disk experiment
docker Execute a docker experiment
dubbo dubbo experiment
jvm method
k8s Kubernetes experiment
mysql mysql experiment
network Network experiment
process Process experiment
servlet java servlet experiment
network中支持的操作如下
delay Delay experiment
dns Dns experiment
drop Drop experiment
loss Loss network package
drop --help:
Drop network data
Usage:
blade create network drop
Flags:
-h, --help help for drop
--invoke-port string Port for invoking
--service-port string Port for external service
众所周知,iptables的规则中,可以设置指定端口进行DROP规则的配置,命令执行完成后,可以观察到iptables中确实被添加了此数据
此时我访问 ‘localhost:8888/ok.htm‘时,接口会block住(如果是REJECT策略会直接抛出错误),最后报找不到端口服务的错误;
实验结束后,可以根据create时返回的uid进行撤销:
如果忘记了uid,可以通过:./blade status [cmd] 命令来进行找回;
针对jvm的一些实验,ChaosBlade的原理主要是使用了字节码增强技术(ASM),即改变class内容,再重新通过jvm-sandbox提供的SandboxClassLoader加载到jvm使其生效,相比于spring的AOP切面,它更像是一此JVM动态切面;
jvm支持的操作如下
Available Commands:
delay delay time
return Return the specify value
throwCustomException throw custom exception
throwDeclaredException Throw the first declared exception of method</pre>
return操作如下:仅支持基本类型的返回
lags:
--classname string The class name with package
--methodname string The method name
--process string Application process name
--value string Value returned, only support primitive type value. If you want return null, set --value null (required)
模拟开始前,需要先指定jvm进程,以便插入被变更后的字节码
./blade create jvm return --classname cn.fraudmetrix.creditcloud.api.impl.ApplicationMonitorServiceImpl --methodname ok --value modify --process 30524 -d
dubbo 接口支持的操作如下:
Available Commands:
delay delay time
throwCustomException throw custom exception
delay具体参数如下:
Flags:
--appname string The consumer or provider application name
--consumer To tag consumer role experiment.
--methodname string The method name in service interface
--offset string delay offset for the time
--process string Application process name
--provider To tag provider experiment
--service string The service interface
--time string delay time (required)
--version string the service version</pre>
A业务在调用dubbo接口超时后,进行了熔断降级处理,为了验证熔断器的执行逻辑是否符合预期,使用了chaosblade进行了阻塞超时场景的故障植入,具体过程如下:
./blade prepare jvm --process 31106
./blade create dubbo delay --time 3000 --service cn.xxx.xxx.api.intf.KuntaAuth --methodname queryConsumeAbility --consumer --process 31106
./blade destroy ec695fee1e458fc6
jvm工具还支持其他操作,如方法执行延迟,抛异常等操作,可以模拟植入更多的异常场景,不再赘述。对增强原理感兴趣的同学,可参考jvm-sandbox中的源码。
标签:dubbo drop tag ice proc 错误 png api off
原文地址:https://www.cnblogs.com/sea520/p/11511233.html