Chaosblade: 阿里一个超级牛逼的混沌实验实施工具
2012 年 6 月 5 日
场景三:调用某个Dubbo服务超时
官网的Demo中给我们提供了:
-
dubbo-provider
-
dubbo-consumer
大家把上面的服务提供者和服务消费者jar包下载下来之后,进到下载目录,然后通过下面命令运行起来:
# 启动 dubbo-provider nohup java -Djava.net.preferIPv4Stack=true -Dproject.name=dubbo-provider -jar dubbo-provider-1.0-SNAPSHOT.jar > provider.nohup.log 2>&1 & # 稍等 2 秒,然后启动 dubbo-consumer nohup java -Dserver.port=8080 -Djava.net.preferIPv4Stack=true -Dproject.name=dubbo-consumer -jar dubbo-consumer-1.0-SNAPSHOT.jar > consumer.nohup.log 2>&1 &
nohup是linux中的命令,可以让java命令后台运行。
运行起来后,可以通过下面的命令来进行服务调用:
http://localhost:8080/hello?msg=world
正常情况下,该请求会很快的完成并返回:
{ "date": "Wed Jul 03 16:33:10 CST 2019", "msg": "Dubbo Service: Hello world" }
进行故障演练:
$ ./blade prepare jvm --process dubbo.consumer {"code":200,"success":true,"result":"5cdbc31f46a3d621"} $ ./blade create dubbo delay --time 3000 --service com.alibaba.demo.HelloService --methodname hello --consumer --process dubbo.consumer {"code":200,"success":true,"result":"3e705e8babe8a86c"}
上面的命令会使consumer在调用com.alibaba.demo.HelloService服务的hello方法时增加3秒的延时。当我们访问上面访问的路径时会比之前等待的更久一点。
在对dubbo进行故障演练时,其实支持的细分场景很多,因为在dubbo中分为consumer和provider两种角色,当consumer在调用provider时,我们现在想使这个请求增加延时,我们既可以在provider端针对指定的服务增加延时,也可以在consumer调用时针对指定的服务进行延时,所以我们可以稍微看下上面的命令,它其实是在consumer进行控制的,命令也是支持在provider端进行控制的,我们运行一下以下命令:
blade create dubbo delay --help
将看到帮助中有下面的信息:
Flags: --appname string The consumer or provider application name --consumer To tag consumer role experiment. --effect-count string The count of chaos experiment in effect --effect-percent string The percent of chaos experiment in effect -h, --help help for delay --methodname string The method name --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) --timeout string set timeout for experiment --version string the service version
其中就有 --consumer
和 --provider
,表示的就是命令中可以控制服务调用的两端。所以如果我们想控制provider端,想让某个接口被调用时超时的话,是完全可以进行故障演练的。
那么关于底层原理的话,需要大家对Dubbo比较了解,Dubbo中是有动态配置功能的,所以Chaosblade应该也是利用了dubbo的动态配置功能。