Dubbo负载均衡算法详解(4大核心算法对比)

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

1. Random 随机算法

Dubbo负载均衡算法详解(4大核心算法对比)-mikechen

核心思想

随机选择 Provider

例如:

A
B
C

每次:

随机调用

加权随机,Dubbo 不是简单随机。

而是:

加权随机

例如:

节点 权重
A 100
B 50
C 200

C 会获得更多流量。

适合:

  • 普通互联网业务;
  • 无状态服务;
  • 大多数 RPC 场景;

 

2. RoundRobin 轮询算法

核心思想

依次轮流调用

例如:

A → B → C → A → B → C

Dubbo负载均衡算法详解(4大核心算法对比)-mikechen

维护:

一个递增序号

每次:

index % provider.size

选择节点。

加权轮询,Dubbo:

支持:

Weighted RoundRobin

高权重机器:

获得更多请求

优点

优点 说明
请求均匀 非常稳定
不易倾斜 流量平均

缺点
无法感知:

机器性能差异

适合:

  • 机器性能一致;
  • 请求处理时间接近;
  • 稳定型业务;

 

3. LeastActive 最少活跃数算法

Dubbo负载均衡算法详解(4大核心算法对比)-mikechen

核心思想

谁处理请求最少
就优先调用谁

本质:

动态负载均衡

每次:

选择 active 最小节点

什么是 Active?
Active:

当前正在处理的请求数

例如:

节点 Active
A 10
B 2
C 30

优先:

选择 B

优点

优点 说明
动态感知压力 非常智能
延迟更低 避免慢节点
高并发效果好 自适应能力强

缺点
实现复杂。

并且:

需要维护 active 状态

特别适合:

  • 请求耗时差异大;
  • 高并发系统;
  • RPC 延迟敏感业务;

4. ConsistentHash 一致性 Hash

Dubbo负载均衡算法详解(4大核心算法对比)-mikechen

核心思想

相同参数:固定落到同一台机器

例如:

userId=1001

永远:

路由到 Provider-A

优点

优点 说明
请求稳定 相同参数固定节点
缓存命中高 本地缓存效果好
会话友好 Session 粘性

缺点
节点变化时:

部分请求迁移

特别适合:

  • 本地缓存;
  • Session 粘性;
  • 用户维度路由。

评论交流
    说说你的看法