Dubbo是大型架构核心,下面我详解Dubbo负载均衡算法@mikechen
1. Random 随机算法

核心思想
随机选择 Provider
例如:
A
B
C
每次:
随机调用
加权随机,Dubbo 不是简单随机。
而是:
加权随机
例如:
| 节点 | 权重 |
|---|---|
| A | 100 |
| B | 50 |
| C | 200 |
C 会获得更多流量。
适合:
- 普通互联网业务;
- 无状态服务;
- 大多数 RPC 场景;
2. RoundRobin 轮询算法
核心思想
依次轮流调用
例如:
A → B → C → A → B → C

维护:
一个递增序号
每次:
index % provider.size
选择节点。
加权轮询,Dubbo:
支持:
Weighted RoundRobin
高权重机器:
获得更多请求
优点
| 优点 | 说明 |
|---|---|
| 请求均匀 | 非常稳定 |
| 不易倾斜 | 流量平均 |
缺点
无法感知:
机器性能差异
适合:
- 机器性能一致;
- 请求处理时间接近;
- 稳定型业务;
3. LeastActive 最少活跃数算法

核心思想
谁处理请求最少
就优先调用谁
本质:
动态负载均衡
每次:
选择 active 最小节点
什么是 Active?
Active:
当前正在处理的请求数
例如:
| 节点 | Active |
|---|---|
| A | 10 |
| B | 2 |
| C | 30 |
优先:
选择 B
优点
| 优点 | 说明 |
|---|---|
| 动态感知压力 | 非常智能 |
| 延迟更低 | 避免慢节点 |
| 高并发效果好 | 自适应能力强 |
缺点
实现复杂。
并且:
需要维护 active 状态
特别适合:
- 请求耗时差异大;
- 高并发系统;
- RPC 延迟敏感业务;
4. ConsistentHash 一致性 Hash

核心思想
相同参数:固定落到同一台机器
例如:
userId=1001
永远:
路由到 Provider-A
优点
| 优点 | 说明 |
|---|---|
| 请求稳定 | 相同参数固定节点 |
| 缓存命中高 | 本地缓存效果好 |
| 会话友好 | Session 粘性 |
缺点
节点变化时:
部分请求迁移
特别适合:
- 本地缓存;
- Session 粘性;
- 用户维度路由。