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