注:Dubbo版本是2.5.7,圖1的原圖在Github上,建議讀者下載原圖,原圖清晰度高。git
圖1 Dubbo集羣容錯架構設計時序圖github
圖2 Dubbo官網給的集羣容錯的架構設計圖設計模式
圖2的大致意思是:先從Directory那裏拿到全部的Invoker,假設爲List<Invoker> s1;以後用Router過濾s1,獲得List<Invoker> s2;以後用loadBalance,從s2中中取出一個Invoker r,用r進行服務調用。架構
注意:Dubbo給接口注入的不是接口的實現類,而是一個代理類,圖1中的InvokerInvocationHandler實現了InvocationHandler,沒錯,是JDK動態代理。架構設計
上述描述較爲簡略,爲把握主旨,省略了不少細節。接下來能夠考慮分析具體細節。圖2中的Directory、LoadBalance都使用了設計模式的模板模式。設計
能夠參考:https://www.jianshu.com/p/8e007012367e代理