dubbo服務治理之路由規則研究

2021-09-02 21:26:35 字數 1927 閱讀 4199

1.今天沒太多事情,擠出點時間,研究了下dubbo的路由規則實現。

首先,看看dubbo消費端的主要呼叫流程(這裡就不畫圖了),以後補充:

第二步:直接跳到動態****裡的invokerinvocationhandler:

這裡忽略invoker的初始化(基本就是提供者註冊+消費端訂閱後初始化)

思考:假如讓你實現乙個rpc的客戶端同步和非同步呼叫你會怎麼實現呢?

public class invokerinvocationhandler implements invocationhandler

public object invoke(object proxy, method method, object args) throws throwable else if ("tostring".equals(methodname) && parametertypes.length == 0) else if ("hashcode".equals(methodname) && parametertypes.length == 0) else }}

第三步:abstractclusterinvoker.invoke;

這裡主要是載入乙個列表:invoker list

public result invoke(invocation invocation) throws rpcexception else

rpcutils.attachinvocationidifasync(this.geturl(), invocation);

return this.doinvoke(invocation, invokers, loadbalance);

}protected list> list(invocation invocation) throws rpcexception

第四步:真正載入invoker的實現:abstractdirectory

注意這裡有個路由選擇的邏輯,也就是我們今天關注的重點:

router.route:具體的路由實現邏輯:比如conditionrouter

思考:假如你的程式中需要實現動態的外掛程式式功能,你如何實現呢:基本思路:配置中心配置+ 配置通知更新+外掛程式根據優先順序生效。---典型的分布式協調場景,zk標配

相比靜態的外掛程式式功能實現思路:spi思想,要靈活很多

public list> list(invocation invocation) throws rpcexception else

} catch (throwable var7) }}

return invokers;}}

第五步:failoverclusterinvoker.doinvoke:

這裡通過負責均衡策略選擇乙個invoker,然後通過各種過濾器過濾。

最後:通過dubboinvoker傳送資料給服務提供端。

了解完呼叫的主流程,我們基本就梳理清楚路由邏輯的實現在那個環節,以及需要注意設定那些屬性,比如runtime.

但是經過我本人測試dubbo的路由功能並不穩定,所有用它做灰度發布不靠譜(但是通過權重設定實現rolling update還是比較靠譜的),不穩定因素有:

1.消費端沒有及時訂閱新增的服務提供者資訊,而我們的需求是需要路由到增的服務提供者,導致conditionrouter.matchcondition無法匹配成功,然後就不會使用路由規則。

2.路由規則沒有及時通知更新到消費端,導致abstractdirectory.setrouters一直沒有新增conditionrouter。(經過測試這個經常出現,這個問題比較嚴重,也有可能是我環境的問題)

學習感悟:總的來說通過今天的研究還是學到了一些常用的設計思路,而不僅僅是研究**和原理。

談談為什麼需要服務治理(Dubbo)

服務治理主要針對於當前分布式架構下多服務 微服務等。服務是分布式系統下的乙個不大不小的部分,有了服務的組成,整個系統才能活起來。隨著業務的增長,服務不能一味地隨之增長,需要管理 治理。沒有服務治理的分布式系統不一定會失敗,但是隨著業務的增長,這個系統一定會很痛苦。服務治理嚴格意義上應該劃分為三個階段...

談談為什麼需要服務治理(Dubbo)

服務治理主要針對於當前分布式架構下多服務 微服務等。服務是分布式系統下的乙個不大不小的部分,有了服務的組成,整個系統才能活起來。隨著業務的增長,服務不能一味地隨之增長,需要管理 治理。沒有服務治理的分布式系統不一定會失敗,但是隨著業務的增長,這個系統一定會很痛苦。服務治理的目標 服務治理嚴格意義上應...

談談為什麼需要服務治理(Dubbo)

服務治理主要針對於當前分布式架構下多服務 微服務等。服務是分布式系統下的乙個不大不小的部分,有了服務的組成,整個系統才能活起來。隨著業務的增長,服務不能一味地隨之增長,需要管理 治理。沒有服務治理的分布式系統不一定會失敗,但是隨著業務的增長,這個系統一定會很痛苦。服務治理嚴格意義上應該劃分為三個階段...