Dubbo是一款高性能的 RPC框架,也是大厂经常使用中间件,下面我详解Dubbo负载均衡原理@mikechen
Dubbo
Dubbo 作为一套成熟的分布式 RPC 框架,支持多种负载均衡策略,以实现服务调用的高效、均衡、可扩展。
默认状态下,Dubbo 使用的是 RandomLoadBalance
(随机调用),它是一种体系效率高而应用场景广的策略。
Dubbo负载均衡策略
Dubbo 的负载均衡,是在服务消费者 (Consumer) 端实现的。
首先,Consumer 从注册中心(如 ZooKeeper),获取 Provider 列表。
然后,根据配置的负载均衡策略,从列表中选择一个 Invoker。
最后,执行远程调用,如下图所示:
客户端 -> Dubbo Consumer (LoadBalance) -> 多个 Dubbo Provider。
消费者从注册中心获取提供者列表后,根据配置的负载均衡策略,在本地选择一个 Invoker (服务提供者抽象) 进行远程调用。
Dubbo 负载均衡策略,如下:
策略名称 | 类名 | 原理概述 |
---|---|---|
随机 | RandomLoadBalance | 按权重随机分配,默认策略 |
轮询 | RoundRobinLoadBalance | 顺序调用各服务节点,可加权重 |
最少活跃调用 | LeastActiveLoadBalance | 选择当前调用最少的节点 |
一致性响应 | ConsistentHashLoadBalance | 保证同一参数给同一节点,保持会话 |
RandomLoadBalance (默认)
原理
按照各节点的权重分配随机值,权重越大,被选中概率越高。
适用场景
- 节点性能相仿,需要均衡调用;
- 调用量大,希望随机分散;
- 允许一定程度上的“不稳定”;
RoundRobinLoadBalance
按照服务节点顺序轮询调用,如下图所示:
支持权重配置,实现有一个维持的调用记录;
适用
- 对调用顺序有需求(如按照 ID 轮询分发级联调用);
- 稳定性要求高;
LeastActiveLoadBalance
简介
- 选择当前处于“最少活跃调用”的 Provider;
- 如果多个节点活跃数相同,再按权重随机;
适用
- 调用耗时不均衡,需要动态同步节点压力
- 对响应时间效果敏感场景
ConsistentHashLoadBalance
简介
- 依据调用参数使用一致性响应算法;
- 保证同一参数给同一节点;
- 合适会话系统、分布式缓存(sessionId, userId);
适用
- 需要保持调用结果稳定性
- 分布式系统中需要“查询结果给同一节点”效果
总结
策略 | 适用场景 |
---|---|
Random | 默认,性能均衡节点 |
RoundRobin | 顺序分配,需要轮询 |
LeastActive | 有性能差异或需效率优先 |
ConsistentHash | 分布式缓存、会话系统 |
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

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