美文网首页软件测试污力_JavaJava 杂谈
ChaosBlade实践【version-0.0.1】

ChaosBlade实践【version-0.0.1】

作者: wuli_小博 | 来源:发表于2019-05-13 16:53 被阅读3次

    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中的源码。

    相关文章

      网友评论

        本文标题:ChaosBlade实践【version-0.0.1】

        本文链接:https://www.haomeiwen.com/subject/qghraqtx.html