dubbo服務治理和監控相關
dubbo作為一個成熟的分散式服務框架,自然提供了服務監控和服務治理的相關功能。
服務治理:dubbo-admin
服務監控:dubbo-monitor
incubator-dubbo-ops
官方提供的專案,部署很簡單
git clone https://github.com/apache/incubator-dubbo-ops.git
選擇master分支。
裡面會有dubbo-admin(服務治理),dubbo-monitor(服務監控),這兩個需要單獨部署。
**
dubbokeeper
**
非官方,集服務治理和服務監控於一體,,服務監控資料提供了lucene、mysql、mongodb等三種儲存方式。部署時,需要單獨部署一個war包還有一個服務監控資料儲存的服務。
git地址:
**
dubbokeeper-mqs
**
dubbokeeper的快速啟動版,只需啟動一個應用就可以了。
git地址: https://github.com/zylele/dubbokeeper-mqs.git
注:
對於服務治理來講dubbokeeper的功能並沒有完全覆蓋dubbo-admin但是基本上也夠用了,而且監控功能比dubbo-monitor強很多(主要是前端頁面好很多。。)
dubbokeeper剛搭建的時候,服務監控那沒有資料,需要有呼叫才能有資料。
**
服務監控原理分析:
**
所謂的監控中心,其實也是一個標準的dubbo服務,實現的是dubbo包裡的
com.alibaba.dubbo.monitor.MonitorService;
是誰呼叫這個服務的呢?
dubbo可設定很多filter,對於監控這塊來講就是 MonitorFilter;
翻開原始碼可以看到
// intercepting invocation public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { if (invoker.getUrl().hasParameter(Constants.MONITOR_KEY)) { RpcContext context = RpcContext.getContext(); // provider must fetch context before invoke() gets called String remoteHost = context.getRemoteHost(); long start = System.currentTimeMillis(); // record start timestamp getConcurrent(invoker, invocation).incrementAndGet(); // count up try { Result result = invoker.invoke(invocation); // proceed invocation chain collect(invoker, invocation, result, remoteHost, start, false); return result; } catch (RpcException e) { collect(invoker, invocation, null, remoteHost, start, true); throw e; } finally { getConcurrent(invoker, invocation).decrementAndGet(); // count down } } else { return invoker.invoke(invocation); } }
上面是MonitorFilter裡的呼叫方法,可以看到很明顯的是
invoker.getUrl().hasParameter(Constants.MONITOR_KEY)
dubbo並不是所有的呼叫都會監控的,在應用中需要配置
<dubbo:monitor protocol=“registry”/>
只有加上這個配置,才會有之後發生的事情。
繼續看程式碼。
呼叫完成後收集相關的呼叫資訊。具體方法
collect(invoker, invocation, result, remoteHost, start, false);
這裡面通過 DubboMonitorFactory 獲取 DubboMonitor然後收集好呼叫資訊,執行DubboMonitor的collect這個方法將呼叫資訊放到map中,然後隔一段時間就將map裡的所有監控資訊呼叫MonitorService提供的服務。
大概意思就是這樣,十月一要下班了不想寫了。想知道就看原始碼,debug一下就都知道了。。
願祖國繁榮昌盛,大家平安喜樂!!!