Dubbo负载均衡的总流程

在整个集群容错的流程中,首先经过Directory获取所有的Invoker列表,然后经过Router根据路由规则过滤Invoker,最后幸存下来的Invoker还需要经过负载均衡这一关,选出最终要调用的Invoker

包装的负载均衡

负载均衡获取可用的服务实际是调用了AbstractClusterInvoker中定义的Invoker select方法,而不是直接使用LoadBalance方法。因为抽象父类在LoadBalance的基础上又封装了一些新特性

  1. 粘滞连接 Dubbo中有一种特性叫粘滞连接

粘滞连接用于有状态服务,尽可能让客户端总是向同一提供者发起调用,除非这个服务欧提供者挂了,在连接另一台

2.可用检测

Dubbo调用URL中,如果含有cluster.availablecheck=false,则不会检测远程服务是否可用,直接调用。如果不设置,则默认会开启检查,对所有的服务都做是否可用的检查,如果不可用,则再次做负载均衡

  1. 避免重复调用

对于已经调用过的远程服务,避免重复选择,每次都是用同一个节点,这种特性避免了在并发场景下,某个节点瞬间被大量请求。

整个逻辑过程大致可分为4步:
(1) 检查URL中是否有配置粘滞连接,如果有则使用粘滞连接的Invoker。如果没有配置粘滞连接,或者重复调用检测不通过,可用检测不通过,进入第二步
(2)通过ExtensionLoader获取负载均衡的具体实现,并通过负载均衡做节点的选择。对选择出来的节点做重复调用、可用性检测、通过则直接返回,否则进入第三步
(3)进行节点的重新选择。如果需要做可用性检测,则会遍历Directory中得到的所有节点,过滤不可用和已经调用过的节点,在剩余的节点中重新做负载均衡;如果不需要做可用性检测,那么也会遍历Directory中得到的所有节点,但只过滤已经用过的,在剩余的节点中重新做负载均衡。这里存在一种情况,就是在过滤不可用或已经调用过的节点时,节点全部被过滤,没有剩下任何节点,此时进入第四步
(4)遍历所有已经调用的节点,选出可用节点,通过负载均衡选出一个节点并返回,如果还找不到可调用节点,返回null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值