dubbo源码解析-集群容错架构设计

开始之前先来一波概念:

                  

上图为官网的架构图,它是从设计的角度而非使用角度画出,但是其中的DirectoryRouterLoadBalance这三个关键词标注重点

进入代理类的Invoker方法中 ,

边看时序图,边走着代码,现在执行序列图的①,到达MockClusterInvoker,执行invoke就要开始进入到集群,也就是Cluster,我们看到前面说的三个关键字之一的Directory。

紧接着到了AbstractDirectory ③

methodInvokerMap很重要,此时代码从methodInvokerMap中取出invokers 如图:

将invokers返回后(序号5),下面来到了第二个关键词,Router,开始进入路由,现在我们到了序号6,此时到了MockInvokersSelector类,不要看类名和Router没有关系,其实他是Router接口的实现类,从官网的介绍图中我们也可以看到Router分为ScriptCondition两种,翻译过来也就是脚本路由条件路由

getNormalInvokers就可以得知,他是要拿到能正常执行的invokers,并将其返回.也就是序号7

此时我们再次回到了AbstractClusterInvoker这个类:

以上过程中完成了哪些内容?

1.在Directory中找出本次集群中全部的invokers;

2.在Router中将上一步的全部invokers挑选出能正常执行的invokers返回;

对应序列图中的⑤和⑦。

思考:如果挑选出来的invokers,到底执行哪一个呢?继续往下看吧

是否看到LoadBalance关键词了呢?⑧

时刻跟着序列图走!!!

如果你配置的是Failfast Cluster(快速失败),Failsafe Cluster(失败安全),Failback Cluster(失败自动恢复),Forking Cluster(并行调用多个服务器,只要一个成功即返回),Broadcast Cluster(广播调用所有提供者,逐个调用,任意一台报错则报错)他也会到达相应的类

调到关键字loadBalance 11

 

此时loadbalance决定执行那个invokers        13Invoker,get();

完!

思考答疑:

   dubbo究竟做了什么。哪些事?

①在Directory中找出本次集群中的全部invokers;

②在router中,将上一步的全部invokers筛选出能正常执行的invokers;

③在loadBalance中,将上一步能正常执行的invokers根据配置的负载均衡策略,挑选出需要执行的Invoker;

下图对应到序列图的⑧

猜你喜欢

转载自blog.csdn.net/z15732621582/article/details/81070388
今日推荐