Dubbo版本是2.7.3.Release. 在前面分析过Reference的过程中分析中,当注册注册的服务是多个实例的时候,会调用Cluster的扩展点的join方法,封装一个带有负载均衡的功能的Invoker
 
	这里Cluster默认扩展点可以出来Cluster类上看出来.默认是用FailoverCluster,也就是Failover集群容错模式,这里总结下集群容错的模式如下:
| 容错模式 | 实现方式 | 
|---|---|
| failover | 集群中服务出现调用失败时,会自定调用另外一台 | 
| failsafe | 集群中服务出现调用失败时,执行失败忽略返回空 | 
| failfast | 集群中服务出现调用失败时,立即抛出异常 | 
| Failback | 集群中服务出现调用失败时,执行失败重试着 | 
| Forking | 集群中服务出现调用失败时,执行调用一批请求调用 | 
| Mergeable | 集群中服务出现调用失败时,执行合并请求调用 | 
| Mock | 集群中服务出现调用失败时,执行返回Mock数据 | 
 
	可以看到通过传入Directory抽象类,直接new了一个FailoverClusterInvoker对象.接下来重点看下分析这个类实现逻辑
 
	这里主要可以看到是len默认是3次失败重试次数,下面是循环3次调用,然后对Ivokers集合进行执行负载均衡,选择一个Invoker,直到调用有结果就返回.这里调用doInvoker是父类AbstractClusterInvoker中抽象方法,
 
	AbstractClusterInvoker中invoker方法主要通过Directory抽象将Invocation转换成Invoker的一个集合(这里Directory是注册中心的抽象,这里通过注册中心信息的多个provider,转换成Invoker的集合),然欧初始化负载均衡扩展点, 这里如果实现异步调用,则会设置一个唯一的key为id,value是自动的值到attachment中,然后就是执行之前的doInvoke逻辑,
 
	加载loadbalance的时候,默认实现LoadBalance的扩展点
 
	默认实现是Random的负载均衡.这里说明下这里是实现的是加权随机算法, 这里总结下dubbo实现负载均衡算法主要四种:
| 负载均衡 | 算法描述 | 
|---|---|
| random | 一种加权随机的负载均衡算法 | 
| RoundRobin | 轮询算法 | 
| LeastActive | 最不活跃算法 | 
| ConsistentHash | 一致性Hash算法 | 
 
	这就是RandomLoadBalance的doSelect方法实现权重的随机的算法,有兴趣可以下去研究下
 
	总结: 今天主要就Dubbo的Cluster集群容错和LoadBalance负载均衡算法实现的源码分析,结下来就是分析Directory抽象怎么实现Invokers的转换.