负载均衡策略与配置细节

Dubbo 支持的消费端负载均衡策略及其使用方法。

Dubbo-go 内置了 client-based 负载均衡机制,如下是当前支持的负载均衡算法,结合上文提到的自动服务发现机制,消费端会自动使用 Weighted Random LoadBalance 加权随机负载均衡策略 选址调用。

如果要调整负载均衡算法,以下是 Dubbo 框架内置的负载均衡策略:

算法特性备注配置值
Weighted Random LoadBalance加权随机默认算法,默认权重相同random (默认)
RoundRobin LoadBalance加权轮询借鉴于 Nginx 的平滑加权轮询算法,默认权重相同roundrobin
LeastActive LoadBalance最少活跃优先 + 加权随机背后是能者多劳的思想leastactive
Consistent Hash LoadBalance一致性哈希确定的入参,确定的提供者,适用于有状态请求consistenthashing
P2C LoadBalancePower of Two Choice随机选择两个节点后,继续选择“连接数”较小的那个节点。p2c
Interleaved Weighted Round Robin一种加权轮训算法https://en.wikipedia.org/wiki/Weighted_round_robin#Interleaved_WRRinterleavedweightedroundrobin
Alias Method Round Robinhttps://en.wikipedia.org/wiki/Alias_methodaliasmethod

全局配置

Dubbo 框架的默认策略是 random 加权随机负载均衡。如果要调整策略,只需要设置 loadbalance 相应取值即可,每种负载均衡策略取值请参见文档最上方表格。

为所有服务调用指定全局配置:

  1. cli, err := client.NewClient(
  2. client.WithClientLoadBalance("roundrobin"),
  3. )

或者一些常用的策略:

  1. cli, err := client.NewClient(
  2. client.WithClientLoadBalanceRoundRobin(),
  3. )

接口级配置

  1. cli, err := client.NewClient(
  2. //...
  3. )
  4. svc, err := greet.NewGreetService(cli, client.WithLoadBalance("roundrobin"))

或者一些常用的策略:

  1. cli, err := client.NewClient(
  2. //...
  3. )
  4. svc, err := greet.NewGreetService(cli, client.WithLoadBalanceRoundRobin())

最后修改 September 13, 2024: Refactor website structure (#2860) (1a4b998f54b)