国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > 14. Dubbo原理解析-集群&容错之Cluster

14. Dubbo原理解析-集群&容错之Cluster

来源:程序员人生   发布时间:2015-01-13 08:21:28 阅读次数:3315次

Dubbo作为1个散布式的服务治理框架,提供了集群部署,路由,软负载均衡及容错机制

 

下图描写了dubbo调用进程中的对集群,负载等的调用关系。

 

Cluster

将Directory中的多个Invoker假装成1个Invoker, 对上层透明,包括集群的容错机制

Cluster接口定义

@SPI(FailoverCluster.NAME)

public interface Cluster {

    @Adaptive

    <T> Invoker<T>join(Directory<T> directory) throws RpcException;

}

Cluster可以看作是工厂类, 将目录directory下的invoker合并成1个统1的Invoker,根据不同集群策略的Cluster创建不同的Invoker

 

我们来看下默许的失败转移,当出现失败重试其他服务的策略, 这个Cluster实现很简单就是创建FailoverCluseterInvoker对象

public class FailoverCluster implements Cluster {

    public final static String NAME ="failover";

    public<T> Invoker<T> join(Directory<T> directory)throws RpcException{

        return new FailoverClusterInvoker<T>(directory);

    }

}

 

 

  下图展现了dubbo提供的所有集群方案


1)AvailableCluster: 获得可用的调用。遍历所有Invokers判断Invoker.isAvalible,只要1个有为true直接调用返回,不管成不成功

2)BroadcastCluster: 广播调用。遍历所有Invokers, 逐一调用每一个调用catch住异常不影响其他invoker调用

3)FailbackCluster: 失败自动恢复, 对invoker调用失败, 后台记录失败要求,任务定时重发, 通经常使用于通知

4)FailfastCluster: 快速失败,只发起1次调用,失败立即保错,通经常使用于非幂等性操作

5)FailoverCluster: 失败转移,当出现失败,重试其它服务器,通经常使用于读操作,但重试会带来更长延迟

(1)   目录服务directory.list(invocation) 列出方法的所有可调用服务

获得重试次数,默许重试两次

(2)   根据LoadBalance负载策略选择1个Invoker

(3)   履行invoker.invoke(invocation)调用

(4)   调用成功返回

调用失败小于重试次数,重新履行从3)步骤开始履行

       调用次数大于等于重试次数抛出调用失败异常

6)FailsafeCluster: 失败安全,出现异常时,直接疏忽,通经常使用于写入审计日志等操作。

7)ForkingCluster: 并行调用,只要1个成功即返回,通经常使用于实时性要求较高的操作,但需要浪费更多服务资源。

8)  MergeableCluster: 分组聚合, 按组合并返回结果,比如菜单服务,接口1样,但有多种实现,用group辨别,现在消费方需从每种group中调用1次返回结果,合并结果返回,这样就能够实现聚合菜单项。

这个还蛮成心思,我们分析下是如何实现的

(1)   根据MERGE_KEY从url获得参数值

(2)   为空不需要merge, 正常调用

(3)   按group分组调用,将返回接口保存到集合中

(4)   获得MERGE_KEY如果是默许的话,获得默许merge策略,主要根据返回类型判断

(5)   如果不是,获得自定义的merge策略

(6)   Merge策略合并调用结果返回

 

9)MockClusterWrapper: 具有调用mock功能是其他Cluster包装

获得url的MOCK_KEY属性

(1)   不存在直接调用其他cluster

(2)   存在值startsWith("force") 强迫mock调用

(3)   存在值不是startsWith("force") 先正常调用, 出现异常在mock调用

 

 

集群模式的配置

<dubbo:service cluster="failsafe" />    服务提供方

<dubbo:reference cluster="failsafe" />  服务消费方

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生