负载均衡

负载均衡

在集群负载均衡过程中,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)