注:Dubbo版本是2.5.7,图1的原图在Github上,建议读者下载原图,原图清晰度高。
图1 Dubbo集群容错架构设计时序图
图2 Dubbo官网给的集群容错的架构设计图
图2的大体意思是:先从Directory那里拿到所有的Invoker,假设为List<Invoker> s1;之后用Router过滤s1,得到List<Invoker> s2;之后用loadBalance,从s2中中取出一个Invoker r,用r进行服务调用。
注意:Dubbo给接口注入的不是接口的实现类,而是一个代理类,图1中的InvokerInvocationHandler实现了InvocationHandler,没错,是JDK动态代理。
- 步骤5中,从RegistryDirectory中取出所有的List<Invoker>,即上述的s1。
- 步骤7中,用Router过滤s1,得到s2。
- 步骤15中,用loadBalance,从s2中取出r。
- 步骤18中,用r进行服务调用。
上述描述较为简略,为把握主旨,省略了很多细节。接下来可以考虑分析具体细节。图2中的Directory、LoadBalance都使用了设计模式的模板模式。
可以参考:https://www.jianshu.com/p/8e007012367e
(adsbygoogle = window.adsbygoogle || []).push({});