Dubbo提供5种负载均衡策略和6种集群容错模式,分别解决“请求往哪发”和“发失败了怎么办”问题;策略通过loadbalance和cluster参数配置,需结合业务特征选型。

Dubbo 默认提供 5 种负载均衡策略和 6 种集群容错模式,它们分别解决“请求往哪发”和“发失败了怎么办”这两个核心问题。选对策略能明显提升系统稳定性与响应效率。
Dubbo 负载均衡策略(5种)
全部实现在 org.apache.dubbo.rpc.cluster.loadbalance 包下,通过 loadbalance 参数配置,支持注解、XML、API 多种方式指定。
- RandomLoadBalance(随机):默认策略。按权重计算概率,随机选取提供者;调用量越大,分布越接近权重比。适合节点性能相近、无强状态依赖的场景。
- RoundRobinLoadBalance(轮询):按顺序循环分发请求,支持带权重的平滑轮询(如权重 3:1:1,则每5次请求中分配3/1/1)。适合稳定、均质的服务集群。
- LeastActiveLoadBalance(最少活跃数):优先选当前正在处理请求数(active count)最少的节点;活跃数相同时再按权重随机。适合响应时间敏感、存在长耗时调用的业务。
- ConsistentHashLoadBalance(一致性哈希):对方法名+参数类型+参数值做哈希,固定参数请求始终路由到同一节点。天然支持会话粘性或本地缓存,但需注意虚拟节点防倾斜。
- ShortestResponseLoadBalance(最短响应时间):基于历史成功调用的平均响应时间选择节点,响应快的更易被选中;若多个节点响应时间相近,则 fallback 到随机。适合 SLA 要求高、节点性能差异明显的环境。
Dubbo 集群容错模式(6种)
定义在 org.apache.dubbo.rpc.cluster.support 包中,通过 cluster 参数设置,默认为 failover(失败自动重试)。
-
FailoverCluster(失败重试):默认模式。调用失败后,自动切换其他可用节点重试(可配
retries=2控制重试次数)。适合读操作或幂等写操作。 - FailfastCluster(快速失败):只发起一次调用,失败立即抛异常,不重试。适合非幂等写操作(如下单、扣库存),避免重复提交。
- FailsafeCluster(失败安全):调用出错仅记录日志,不抛异常、不中断流程。适合通知类、日志上报等弱依赖场景。
- ForkingCluster(并行调用):同时调用多个节点,只要一个成功即返回。适合对实时性要求极高、可容忍资源开销的场景(如风控校验)。
- AvailableCluster(可用优先):遍历所有节点,找到第一个可用的就直接调用,不等待健康检查结果。适合启动阶段或极简容错逻辑。
- MergeableCluster(合并结果):将多个节点的返回结果合并(需返回类型支持合并,如 List 或 Map)。常用于分片查询或聚合统计。
基本上就这些。策略不是越多越好,关键是结合业务特征——比如订单服务用 failfast + leastactive,配置中心推送用 failsafe + random,缓存类接口用 consistenthash。配置优先级遵循:方法级 > 接口级 > 全局配置。










