注: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代理