P80 Dubbo 负载均衡策略是什么?不同场景该用哪一种?
面试题:Dubbo 有哪几种负载均衡策略?各自适用什么场景?
1. Dubbo 四种负载均衡策略
① Random(随机,默认)
text
按权重随机选择一台提供者- 默认策略;权重可配;
- 适用:绝大多数场景,权重均分时效果接近轮询,简单平滑。
② RoundRobin(轮询)
text
按顺序轮流调用,支持加权- 新版本是平滑加权轮询,避免突刺;
- 适用:请求处理时间相对均匀的场景。
③ LeastActive(最少活跃调用数)
text
选当前活跃调用数最少的节点(正在处理的请求最少的)- 动态感知节点负载,慢节点自然少接活;
- 适用:各节点性能差异大、处理耗时不均匀的场景。
④ ConsistentHash(一致性哈希)
text
相同参数的请求永远路由到同一台节点- 适用:有状态服务(本地缓存、Session),相同用户/相同 key 固定打在同一节点;
- 节点变化时只影响小部分 key(虚拟节点均匀分布)。
2. 怎么选
| 场景 | 策略 |
|---|---|
| 默认无特殊要求 | Random |
| 节点性能差异大、耗时不均 | LeastActive |
| 有本地缓存/状态,要求同一 key 同节点 | ConsistentHash |
| 请求耗时均匀、想严格均摊 | RoundRobin |
3. 加分点
- 权重本质是"按权重扩大被选中概率",随机/轮询都支持;
- 提到 Dubbo 的负载均衡是调用端(Consumer)本地做的,不经过中心;
- 追问"和 Nginx 负载均衡区别":Nginx 是网关层集中分发,Dubbo 是客户端侧选择,基于注册中心的服务列表;
- 补充:集群容错(failover/failfast)与负载均衡是两个维度,别混。
一句话总结
Dubbo 默认 Random 随机(带权重),另有 RoundRobin 轮询、LeastActive 最少活跃(节点性能不均时用)、ConsistentHash 一致性哈希(有状态场景);按业务选择,通常默认 Random 就够。