ChaosBlade实践【version-0.0.1】

1.ChaosBlade简介

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
ChaosBlade支持的能力
  • 在本团队内,此工具目前的实践场景如下:
    1.自测阶段的故障植入,在不需要变更真实逻辑的情况下,验证自己的异常处理;
    2.测试同学在测试阶段,模拟底层依赖服务的故障场景,验证系统可用程度,降级方案是否生效等;
    3.业务故障演练时,在不需要变更真实逻辑的情况下,可以人为模拟特定场景的故障异常,验证止损方案是否可是有效的,可落地的;

2.三个demo

2.1 network实验

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] 命令来进行找回;

2.2 Java返回值变更实验

针对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
  • 操作说明
    1.试验结束后,先销毁了返回值的变更,重新调用ok接口后,发现数据已经恢复;
    2.整个JVM实验结束后,如果需要对整个环境进行销毁,使用revoke;

2.3 dubbo接口阻塞实验

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 
  • 植入超时故障后,现象如下:
    1.dubbo filter中拿到超时异常,熔断器【Sentinel】开始计数;
    2.达到配置的阈值后,走降级逻辑,如返回固定结果或切换到其他类型的数据源等操作;

jvm工具还支持其他操作,如方法执行延迟,抛异常等操作,可以模拟植入更多的异常场景,不再赘述。对增强原理感兴趣的同学,可参考jvm-sandbox中的源码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355