负载均衡
负载均衡
在集群负载均衡过程中,Dubbo 提供多种均衡策略,默认策略为 weighted random
策略,即基于权重的随机负载均衡策略。
在实现上,Dubbo 提供的是客户端负载均衡,即由 Consumer 使用负载均衡算法决定将请求发送到哪个 Provider 实例。
负载均衡策略
目前,Dubbo 内置了以下负载均衡算法,可以通过配置调整启用。
算法 | 特性 | 备注 |
---|---|---|
Weighted Random LoadBalance | 加权随机 | 默认算法,默认权重相同。 |
RoundRobin LoadBalance | 加权轮询 | 受 Nginx 的平滑加权轮询算法启发。 |
LeastActive LoadBalance | 最少活跃 + 加权随机 | “能者多劳”的原则。 |
Shortest-Response LoadBalance | 最短响应 + 加权随机 | 更注重响应速度。 |
ConsistentHash LoadBalance | 一致性哈希 | 确定性参数导致确定性提供者,适用于有状态请求。 |
P2C LoadBalance | 两选一算法 | 随机选择两个节点后,选择“连接”较少的那个。 |
Adaptive LoadBalance | 自适应负载均衡 | 基于 P2C 算法,选择负载最小的节点。 |
加权随机
- 加权随机:随机选择的概率根据权重设置。
- 在横截面上,碰撞概率很高,但随着调用量的增加,分布变得更加均匀。经过基于概率的加权后,它也相当均匀,这有利于动态调整提供者权重。
- 缺点:存在慢速提供者累积请求的问题。
RoundRobin
- 加权轮询:根据比例权重以循环方式调用节点。
- 缺点:存在慢速提供者累积请求的问题。
对于加权轮询,如果节点的权重过大,则存在短时间内集中调用的问题。
LeastActive
- 加权最少活跃:优先选择活跃调用最少的提供者。活跃调用越少,提供者的处理能力越强。
- 这确保了较慢的提供者接收较少的请求,因为较慢的提供者在发送的请求和接收的响应之间会有更大的差异。
ShortestResponse
- 加权最短响应:响应时间更快的提供者处理更多请求。
- 缺点:这可能导致流量过于集中在高性能节点上。
ConsistentHash
- 一致性哈希:具有相同参数的请求始终发送到同一个提供者。
- 当提供者出现故障时,最初定向到该提供者的请求将根据虚拟节点分散到其他提供者,而不会造成重大中断。
- 详情请参考:一致性哈希 | WIKIPEDIA
P2C 负载均衡
两选一算法简单但经典。
自适应负载均衡
顾名思义,自适应是一种自适应的负载均衡机制,它始终尝试将请求转发到负载最小的节点。
配置
Dubbo 允许提供者配置默认的负载均衡策略,以便所有消费者默认使用提供者指定的策略。消费者也可以指定自己的负载均衡策略。如果双方都没有配置,则默认使用随机负载均衡策略。
每个应用程序可以配置不同的服务以使用不同的负载均衡策略,甚至可以为同一服务的不同方法指定不同的策略。
有关配置详细信息,请参阅不同语言的实现
自定义扩展
负载均衡策略支持自定义扩展实现。有关详细信息,请参阅 Dubbo 的可扩展性.
上次修改时间:2023 年 10 月 16 日:将部分特性概述文档翻译成英文 (#2831) (0c0180f8128)