Dubbo负载均衡策略详解(图文全面总结)

Dubbo负载均衡策略详解(图文全面总结)-mikechen

Dubbo是一款高性能的 RPC框架,也是大厂经常使用中间件,下面我详解Dubbo负载均衡原理@mikechen

Dubbo

Dubbo 作为一套成熟的分布式 RPC 框架,支持多种负载均衡策略,以实现服务调用的高效、均衡、可扩展。

默认状态下,Dubbo 使用的是 RandomLoadBalance(随机调用),它是一种体系效率高而应用场景广的策略。

Dubbo负载均衡策略详解(图文全面总结)-mikechen

 

Dubbo负载均衡策略

Dubbo 的负载均衡,是在服务消费者 (Consumer) 端实现的。

首先,Consumer 从注册中心(如 ZooKeeper),获取 Provider 列表。

然后,根据配置的负载均衡策略,从列表中选择一个 Invoker。

最后,执行远程调用,如下图所示:

Dubbo负载均衡策略详解(图文全面总结)-mikechen

客户端 -> Dubbo Consumer (LoadBalance) -> 多个 Dubbo Provider。

消费者从注册中心获取提供者列表后,根据配置的负载均衡策略,在本地选择一个 Invoker (服务提供者抽象) 进行远程调用。

Dubbo 负载均衡策略,如下:

策略名称 类名 原理概述
随机 RandomLoadBalance 按权重随机分配,默认策略
轮询 RoundRobinLoadBalance 顺序调用各服务节点,可加权重
最少活跃调用 LeastActiveLoadBalance 选择当前调用最少的节点
一致性响应 ConsistentHashLoadBalance 保证同一参数给同一节点,保持会话

 

RandomLoadBalance (默认)

原理

按照各节点的权重分配随机值,权重越大,被选中概率越高。

Dubbo负载均衡策略详解(图文全面总结)-mikechen

适用场景

  • 节点性能相仿,需要均衡调用;
  • 调用量大,希望随机分散;
  • 允许一定程度上的“不稳定”;

 

RoundRobinLoadBalance

按照服务节点顺序轮询调用,如下图所示:

Dubbo负载均衡策略详解(图文全面总结)-mikechen

支持权重配置,实现有一个维持的调用记录;

适用

  • 对调用顺序有需求(如按照 ID 轮询分发级联调用);
  • 稳定性要求高;

 

LeastActiveLoadBalance

简介

  • 选择当前处于“最少活跃调用”的 Provider;
  • 如果多个节点活跃数相同,再按权重随机;

Dubbo负载均衡策略详解(图文全面总结)-mikechen

适用

  • 调用耗时不均衡,需要动态同步节点压力
  • 对响应时间效果敏感场景

 

ConsistentHashLoadBalance

简介

  • 依据调用参数使用一致性响应算法;
  • 保证同一参数给同一节点;
  • 合适会话系统、分布式缓存(sessionId, userId);

Dubbo负载均衡策略详解(图文全面总结)-mikechen

适用

  • 需要保持调用结果稳定性
  • 分布式系统中需要“查询结果给同一节点”效果

 

总结

策略 适用场景
Random 默认,性能均衡节点
RoundRobin 顺序分配,需要轮询
LeastActive 有性能差异或需效率优先
ConsistentHash 分布式缓存、会话系统

 

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法