测试服务采用双协议,一个rest协议,一个dubbo协议.
测试 dubbo-admin,dubbo-admin主要是做路由配置和动态配置2块。
动态配置测试
1. checkout tag dubbo-2.6.0代码(命令 git checkout -B tag-dubbo-2.6.0 dubbo-2.6.0),进入dubbo-admin目录, mvn jetty:run
2. 测试"禁用提供者",参数 disabled=true
dubbo协议:
override://10.1.9.254:20800/com.alibaba.boot.dubbo.service.IHelloService?category=configurators&disabled=true&dynamic=false&enabled=true&group=test&version=1.0.0
rest协议:
override://10.1.9.254:7001/com.alibaba.boot.dubbo.service.IHelloRestService?category=configurators&disabled=true&dynamic=false&enabled=true&group=test&version=1.0.0
3.结果
1. dubbo协议配置后无法访问。rest协议,通过 curl http://localhost:7001/rest/hello,还可以访问, 因为不走 cluster(cluster配置只在consumer端生效,curl跳过了consumer配置)。
2. rest协议无法泛化调用
4.看看文档
动态配置url规则
override: 覆盖方式,协议,必填
0.0.0.0 : 表示对哪些ip地址生效, 如果只覆盖某个ip, 请填入具体ip地址,必填
com.foo.BarService : 必填,对指定服务生效
category=configurators : 必填, 标识该数据为动态配置类型, 必填
dynamic=false : 表示该数据为持久数据, 当注册方退出时, 数据依然保存在注册中心, 必填
enabled=true: 覆盖规则是否生效, 缺省生效
application=foo: 表示只对指定应用生效, 可不填,表示对所有应用生效
可以覆盖的参数, 供参考
1. 容量评估时调整权重,降低一台机器的权重,看其他机器的压力. 参数: weight=200, 默认100
2. 禁用提供者, 下线某台机器. 参数: disabled=true
3. 调整负载均衡策略. 参数: loadbalance=leastactive
4. 服务降级. 参数: mock=force:return+null / mock=fail:return+null
5. 设置超时时间. 参数 timeout=1000
5. 也可以代码实现
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&timeout=1000"));
测试 dubbo-monitor-sample
1. dubbo-monitor-sample,SimpleMonitorService 也是一个dubbo服务, dubbo-monitor-sample作为privider存在。配置文件(conf/dubbo.properties)里, dubbo.container=log4j,spring,registry,jetty
dubbo container, 可以看源码,不是很难理解, 启动执行的入口是 com.alibaba.dubbo.container.Main
不太了解jetty的性能,如果访问qps较高,会不会有影响
2. DubboMonitor 定时调用 monitorService接口,测试时可以把interval调短一些 <dubbo:monitor protocol="registry" interval="5000">
3. MonitorFilter 调用了 MonitorService,MonitorFactory采用异步的方式来获取 MonitorService,cluster模式是failsafe,所以本次调用不会影响正常服务
这里有个bug, DubboMonitorFactory.createMonitor
看代码是用failsafe ,可是断点跟踪
怎么是 Failover 。。。
RegistryDirectory 里
传的参数被clear掉了。。
dubbo 的 url构造、传参,太容易把人绕晕。尝试
解决
不晓得是我使用姿势不对,还是真是个bug。。。
dubbo-2.6.0 版本包含 dubbo-admin 和 dubbo-monitor-sample,新版本git地址,https://github.com/apache/incubator-dubbo-ops,单独一个ops项目, 现在提供的功能和老版本一样,有几个未实现的功能入口
总结
1. 路由规则很强大,zookeeper不支持多dc,可以用路由解决。
2. 容量评估,评估单台机器性能,可以调整weight
3. 某台机器出问题,可是屏蔽访问
4. dubbo-monitor-sample 只支持单台,如果负载较大,应该也可以通过路由解决