測(cè)試服務(wù)采用雙協(xié)議,一個(gè)rest協(xié)議,一個(gè)dubbo協(xié)議.
測(cè)試 dubbo-admin,dubbo-admin主要是做路由配置和動(dòng)態(tài)配置2塊。
動(dòng)態(tài)配置測(cè)試
1. checkout tag dubbo-2.6.0代碼(命令 git checkout -B tag-dubbo-2.6.0 dubbo-2.6.0),進(jìn)入dubbo-admin目錄, mvn jetty:run
2. 測(cè)試"禁用提供者",參數(shù) disabled=true
dubbo協(xié)議:
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協(xié)議:
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.結(jié)果
????????1. dubbo協(xié)議配置后無法訪問。rest協(xié)議,通過 curl http://localhost:7001/rest/hello,還可以訪問, 因?yàn)椴蛔?cluster(cluster配置只在consumer端生效,curl跳過了consumer配置)。?
? ??????2. rest協(xié)議無法泛化調(diào)用
4.看看文檔
動(dòng)態(tài)配置url規(guī)則
????override: 覆蓋方式,協(xié)議,必填
????0.0.0.0 : 表示對(duì)哪些ip地址生效, 如果只覆蓋某個(gè)ip, 請(qǐng)?zhí)钊刖唧wip地址,必填
? ? com.foo.BarService :? 必填,對(duì)指定服務(wù)生效
? ? category=configurators :? 必填, 標(biāo)識(shí)該數(shù)據(jù)為動(dòng)態(tài)配置類型, 必填
????dynamic=false :? 表示該數(shù)據(jù)為持久數(shù)據(jù), 當(dāng)注冊(cè)方退出時(shí), 數(shù)據(jù)依然保存在注冊(cè)中心, 必填
????enabled=true:? 覆蓋規(guī)則是否生效, 缺省生效
????application=foo: 表示只對(duì)指定應(yīng)用生效, 可不填,表示對(duì)所有應(yīng)用生效
可以覆蓋的參數(shù), 供參考
????1. 容量評(píng)估時(shí)調(diào)整權(quán)重,降低一臺(tái)機(jī)器的權(quán)重,看其他機(jī)器的壓力. 參數(shù): weight=200, 默認(rèn)100
????2. 禁用提供者, 下線某臺(tái)機(jī)器.? 參數(shù): disabled=true
????3. 調(diào)整負(fù)載均衡策略. 參數(shù): loadbalance=leastactive
????4. 服務(wù)降級(jí).? 參數(shù): mock=force:return+null / mock=fail:return+null
????5. 設(shè)置超時(shí)時(shí)間. 參數(shù) timeout=1000
5. 也可以代碼實(shí)現(xiàn)
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"));
測(cè)試 dubbo-monitor-sample
1. dubbo-monitor-sample,SimpleMonitorService 也是一個(gè)dubbo服務(wù),? ? dubbo-monitor-sample作為privider存在。配置文件(conf/dubbo.properties)里, dubbo.container=log4j,spring,registry,jetty
? ? ? ? ? dubbo container, 可以看源碼,不是很難理解, 啟動(dòng)執(zhí)行的入口是 com.alibaba.dubbo.container.Main
? ? ? ? 不太了解jetty的性能,如果訪問qps較高,會(huì)不會(huì)有影響
2. DubboMonitor 定時(shí)調(diào)用 monitorService接口,測(cè)試時(shí)可以把interval調(diào)短一些 <dubbo:monitor protocol="registry" interval="5000">
3. MonitorFilter 調(diào)用了 MonitorService,MonitorFactory采用異步的方式來獲取 MonitorService,cluster模式是failsafe,所以本次調(diào)用不會(huì)影響正常服務(wù)
? ? ? ?這里有個(gè)bug,?DubboMonitorFactory.createMonitor

看代碼是用failsafe ,可是斷點(diǎn)跟蹤

怎么是 Failover? 。。。
RegistryDirectory 里

傳的參數(shù)被clear掉了。。
dubbo 的 url構(gòu)造、傳參,太容易把人繞暈。嘗試

解決

不曉得是我使用姿勢(shì)不對(duì),還是真是個(gè)bug。。。
dubbo-2.6.0 版本包含 dubbo-admin 和 dubbo-monitor-sample,新版本git地址,https://github.com/apache/incubator-dubbo-ops,單獨(dú)一個(gè)ops項(xiàng)目, 現(xiàn)在提供的功能和老版本一樣,有幾個(gè)未實(shí)現(xiàn)的功能入口
總結(jié)
????1. 路由規(guī)則很強(qiáng)大,zookeeper不支持多dc,可以用路由解決。
????2. 容量評(píng)估,評(píng)估單臺(tái)機(jī)器性能,可以調(diào)整weight
????3. 某臺(tái)機(jī)器出問題,可是屏蔽訪問
????4. dubbo-monitor-sample 只支持單臺(tái),如果負(fù)載較大,應(yīng)該也可以通過路由解決