dubbo的负载容错机制

本文介绍了Dubbo提供的六种容错方案,包括失败重试、快速失败、失败安全、失败自动恢复、并行调用及广播调用。这些机制帮助开发者处理服务调用过程中的各种异常情况。

摘自博客:https://www.cnblogs.com/xhj123/p/9087532.html

Dubbo提供了多种容错方案,缺省模式为failover,也就是失败重试。

1、Failover Cluster:失败重试

当服务消费方调用服务提供者失败后自动切换到其他服务提供者服务器进行重试。这通常用于读操作或者具有幂等的写操作,需要注意的是重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。

接口级别配置重试次数方法 <dubbo:reference retries="2" /> ,如上配置当服务消费方调用服务失败后,会再重试两次,也就是说最多会做三次调用,这里的配置对该接口的所有方法生效。当然你也可以针对某个方法配置重试次数如下:

<dubbo:reference>
    <dubbo:method name="sayHello" retries="2" />
</dubbo:reference>

2、Failfast Cluster:快速失败

当服务消费方调用服务提供者失败后,立即报错,也就是只调用一次。通常这种模式用于非幂等性的写操作。

3、Failsafe Cluster:失败安全

当服务消费者调用服务出现异常时,直接忽略异常。这种模式通常用于写入审计日志等操作。

4、Failback Cluster:失败自动恢复

当服务消费端用服务出现异常后,在后台记录失败的请求,并按照一定的策略后期再进行重试。这种模式通常用于消息通知操作。

5、Forking Cluster:并行调用

当消费方调用一个接口方法后,Dubbo Client会并行调用多个服务提供者的服务,只要一个成功即返回。这种模式通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

6、Broadcast Cluster:广播调用

当消费者调用一个接口方法后,Dubbo Client会逐个调用所有服务提供者,任意一台调用异常则这次调用就标志失败。这种模式通常用于通知所有提供者更新缓存或日志等本地资源信息。

如上,Dubbo本身提供了丰富的集群容错模式,但是如果您有定制化需求,可以根据Dubbo提供的扩展接口Cluster进行定制。在后面的消费方启动流程章节会讲解何时/如何使用的集群容错。

### Dubbo 容错机制详解 Dubbo 作为一款高性能的 RPC 框架,提供了多种容错机制,以增强分布式系统在服务调用失败时的健壮性和可用性。这些机制在底层自动处理服务调用失败的情况,确保系统的稳定运行,同时允许用户通过配置灵活选择不同的容错策略 [^2]。 #### 重试机制(Failover) Failover 是 Dubbo 默认的容错策略。当服务调用失败时,框架会自动尝试调用其他可用的服务实例。这种机制适用于读操作或幂等性操作,确保最终调用成功。Failover 通常结合重试次数进行配置,例如: ```java @Reference(retries = 3) ``` 该配置表示在调用失败时最多尝试 3 次,包括首次调用失败后的重试 [^2]。 #### 快速失败(Failfast) Failfast 策略适用于对实时性要求较高的场景。如果服务调用失败,系统不会进行重试,而是立即抛出异常。这种机制适用于非幂等操作或写操作,避免重复执行可能造成数据不一致的问题 。 #### 失败后回调(Failback) Failback 机制会在服务调用失败时将请求记录下来,并在后台异步重试。它适用于对可靠性要求较高但对实时性要求较低的场景,例如日志收集、通知等操作 。 #### 安全失败(Failsafe) Failsafe 策略在调用失败时不会抛出异常,也不会进行重试,而是直接返回空结果。这种机制适用于非关键路径的调用,例如监控数据上报等 。 #### 并行调用(Forking) Forking 策略会同时调用多个服务实例,只要其中一个成功返回结果即可。这种机制适用于对响应时间敏感的场景,但会增加系统资源的消耗 [^2]。 #### 广播调用(Broadcast) Broadcast 策略会将请求发送给所有可用的服务实例,并等待所有实例的响应。它适用于需要通知所有服务实例执行某些操作的场景,例如配置更新 [^2]。 #### 熔断机制(Mock) Dubbo 支持基于 Hystrix 的熔断机制,当服务调用失败率达到一定阈值时,系统会进入熔断状态,直接返回预设的降级结果,避免服务雪崩效应。例如,可以通过以下方式配置熔断策略: ```java @Reference(mock = "return null") ``` 该配置表示在服务调用失败时返回 null,避免阻塞调用方 。 #### 可用性优先(Available) Available 策略会优先调用当前可用的服务实例,避免调用不可用的服务节点,从而提高调用成功率 。 #### 合并调用(Mergeable) Mergeable 策略允许将多个请求合并为一个调用,适用于需要批量处理的场景,减少网络开销,提高性能 。 --- ### 容错机制的透明性与可配置性 Dubbo容错机制对上层应用是完全透明的,用户无需在业务逻辑中显式处理失败情况。同时,用户可以根据业务需求灵活配置不同的容错策略,甚至为不同服务设置不同的容错方式,以达到最佳的系统稳定性 [^2]。 --- ### 示例配置 以下是一个 Dubbo 服务引用的配置示例,展示了如何指定不同的容错策略: ```java @Reference(loadbalance = "random", retries = 2, mock = "return default value") ``` 该配置表示使用随机负载均衡策略,最多重试 2 次,并在失败时返回默认值 。 --- ### 总结 Dubbo 提供了丰富的容错机制,包括 Failover、Failfast、Failback、Failsafe、Forking、Broadcast、Mock、Available 和 Mergeable 等策略。这些机制可以有效提升分布式系统的健壮性和可用性,同时支持高度可配置化,以满足不同业务场景的需求 [^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值