Dubbo源码分析:小白入门篇

13933033762 · · 67 次点击 · · 开始浏览    

获课:youkeit.xyz/13677/

获取ZY↑↑方打开链接↑↑

Dubbo 的集群容错机制是其核心特性之一,旨在提高分布式服务调用的可靠性和稳定性。通过集群容错机制,Dubbo 能够有效地处理服务调用过程中可能出现的各种异常情况,如服务不可用、网络故障等,从而保证系统的整体可用性和健壮性。以下是对 Dubbo 集群容错机制的详细解释:

1. 集群容错的基本概念

集群容错是指在分布式系统中,当某个服务提供者节点出现故障时,调用方(消费者)能够自动切换到其他可用的服务提供者节点,从而保证服务的连续性和可用性。Dubbo 提供了多种集群容错策略,以适应不同的应用场景和需求。

2. 集群容错的主要组件

  • Cluster 接口:定义了集群容错的基本行为,是所有集群容错策略的顶层接口。

    • 源码路径dubbo-cluster 模块。

    • 关键方法join(Directory<T> directory)

  • Cluster Invoker:集群容错的具体实现,负责调用远程服务并处理异常情况。

  • Directory:维护服务提供者的列表,提供服务发现和路由功能。

  • LoadBalance:负责选择合适的服务提供者进行调用。

3. 主要的集群容错策略

Dubbo 提供了多种集群容错策略,每种策略适用于不同的场景:

a. Failover Cluster(失败自动切换)

  • 工作原理:当调用失败时,自动切换到其他可用的服务提供者进行重试。默认的集群容错策略。

  • 适用场景:适用于读操作或幂等性操作,因为重试可能会导致重复执行。

  • 配置参数

    • retries:重试次数,默认为 2。

  • 源码路径dubbo-cluster 模块。

  • 关键类FailoverClusterFailoverClusterInvoker

b. Failfast Cluster(快速失败)

  • 工作原理:只调用一次,如果失败则立即抛出异常,不进行重试。

  • 适用场景:适用于非幂等性操作,如新增、删除操作,避免重复执行导致的数据不一致。

  • 配置参数:无。

  • 源码路径dubbo-cluster 模块。

  • 关键类FailfastClusterFailfastClusterInvoker

c. Failsafe Cluster(失败安全)

  • 工作原理:调用失败时,记录日志并忽略异常,不进行重试,也不抛出异常。

  • 适用场景:适用于不重要或可容忍失败的操作,如日志记录、通知发送等。

  • 配置参数:无。

  • 源码路径dubbo-cluster 模块。

  • 关键类FailsafeClusterFailsafeClusterInvoker

d. Failback Cluster(失败自动恢复)

  • 工作原理:调用失败时,记录失败请求,定时重试,直到成功为止。

  • 适用场景:适用于需要保证最终一致性的操作,如消息队列、异步处理等。

  • 配置参数

    • retryPeriod:重试间隔时间,默认为 5 秒。

  • 源码路径dubbo-cluster 模块。

  • 关键类FailbackClusterFailbackClusterInvoker

e. Forking Cluster(并行调用)

  • 工作原理:同时调用多个服务提供者,只要有一个成功即返回结果。

  • 适用场景:适用于对性能要求高且对结果一致性要求不高的操作,如查询操作。

  • 配置参数

    • forks:并行调用的最大数量,默认为 5。

  • 源码路径dubbo-cluster 模块。

  • 关键类ForkingClusterForkingClusterInvoker

f. Broadcast Cluster(广播调用)

  • 工作原理:对所有服务提供者进行调用,任意一个调用失败即视为失败。

  • 适用场景:适用于需要所有服务提供者都执行的操作,如缓存刷新、状态同步等。

  • 配置参数:无。

  • 源码路径dubbo-cluster 模块。

  • 关键类BroadcastClusterBroadcastClusterInvoker

4. 集群容错的实现机制

a. Directory

  • 作用:维护服务提供者的列表,提供服务发现和路由功能。

  • 关键类AbstractDirectoryRegistryDirectory

b. Router

  • 作用:根据路由规则,筛选出合适的服务提供者。

  • 关键类RouterConditionRouterScriptRouter

c. LoadBalance

  • 作用:根据负载均衡策略,选择一个或多个服务提供者进行调用。

  • 关键类AbstractLoadBalanceRandomLoadBalanceRoundRobinLoadBalanceLeastActiveLoadBalance

d. Invoker

  • 作用:封装服务调用的逻辑,负责实际的远程调用。

  • 关键类AbstractInvokerClusterInvoker

5. 集群容错的配置与使用

Dubbo 的集群容错策略可以通过配置文件进行设置,例如在 dubbo:service 或 dubbo:reference 标签中设置 cluster 属性。例如:

xml取消自动换行复制<dubbo:service interface="com.example.DemoService" cluster="failover" retries="3" />

或者在 dubbo:reference 中:

xml取消自动换行复制<dubbo:reference id="demoService" interface="com.example.DemoService" cluster="failfast" />
67 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传