Dubbo的五种负载均衡策略2020 年 5 月 15 日,Dubbo 发布 2.7.7 release 版本 。其中有这么一个 Features
![2万字长文带你细细盘点五种负载均衡策略](http://img.jiangsulong.com/220416/114IC354-0.jpg)
文章插图
新增一个负载均衡策略 。
熟悉我的老读者肯定是知道的,Dubbo 的负载均衡我都写过专门的文章,对每个负载均衡算法进行了源码的解读,还分享了自己调试过程中的一些骚操作 。
新的负载均衡出来了,那必须的得解读一波 。
先看一下提交记录:
https://github.com/chickenlj/incubator-dubbo/commit/6d2ba7ec7b5a1cb7971143d4262d0a1bfc826d45
![2万字长文带你细细盘点五种负载均衡策略](http://img.jiangsulong.com/220416/114I61193-1.jpg)
文章插图
负载均衡是基于 SPI 实现的,我们看到对应的文件中多了一个名为 shortestresponse 的 key 。
这个,就是新增的负载均衡策略了 。看名字,你也知道了这个策略的名称就叫:最短响应 。
所以截止 2.7.7 版本,官方提供了五种负载均衡算法了,他们分别是:
- ConsistentHashLoadBalance 一致性哈希负载均衡
- LeastActiveLoadBalance 最小活跃数负载均衡
- RandomLoadBalance 加权随机负载均衡
- RoundRobinLoadBalance 加权轮询负载均衡
- ShortestResponseLoadBalance 最短响应时间负载均衡
所以,需要特别强调一下的是,这篇文章集合了之前写的三篇负载均衡的文章 。看完最短响应时间负载均衡这一部分后,如果你看过我之前的那三篇文章,你可以温故而知新,也可以直接拉到文末看看我推荐的一个活动,然后点个赞再走 。如果你没有看过那三篇,这篇文章如果你细看,肯定有很多收获,以后谈起负载均衡的时候若数家珍,但是肯定需要看非常非常长的时间,做好心理准备 。
我已经预感到了,这篇文章妥妥的会超过 2 万字 。属于硬核劝退文章,想想就害怕 。最短响应时间负载均衡首先,我们看一下这个类上的注解,先有个整体的认知 。
org.Apache.dubbo.rpc.cluster.loadbalance.ShortestResponseLoadBalance
![2万字长文带你细细盘点五种负载均衡策略](http://img.jiangsulong.com/220416/114IB444-2.jpg)
文章插图
我来翻译一下是什么意思:
- 从多个服务提供者中选择出调用成功的且响应时间最短的服务提供者,由于满足这样条件的服务提供者有可能有多个 。所以当选择出多个服务提供者后要根据他们的权重做分析 。
- 但是如果只选择出来了一个,直接用选出来这个 。
- 如果真的有多个,看它们的权重是否一样,如果不一样,则走加权随机算法的逻辑 。
- 如果它们的权重是一样的,则随机调用一个 。
![2万字长文带你细细盘点五种负载均衡策略](http://img.jiangsulong.com/220416/114I63192-3.jpg)
文章插图
有了上面的整体概念的铺垫了,接下来分析源码的时候就简单了 。
源码一共就 66 行,我把它分为 5 个片段去一一分析 。
![2万字长文带你细细盘点五种负载均衡策略](http://img.jiangsulong.com/220416/114IB449-4.jpg)
文章插图
这里一到五的标号,对应上面流程图中的标号 。我们一个个的说 。
标号为①的部分
![2万字长文带你细细盘点五种负载均衡策略](http://img.jiangsulong.com/220416/114IB060-5.jpg)
文章插图
这一部分是定义并初始化一些参数,为接下来的代码服务的,翻译一下每个参数对应的注释:
length 参数:服务提供者的数量 。
shortestResponse 参数:所有服务提供者的估计最短响应时间 。(这个地方我觉得注释描述的不太准确,看后面的代码可以知道这只是一个零时变量,在循环中存储当前最短响应时间是多少 。)
shortCount 参数:具有相同最短响应时间的服务提供者个数,初始化为 0 。
shortestIndexes 参数:数组里面放的是具有相同最短响应时间的服务提供者的下标 。
weights 参数:每一个服务提供者的权重 。
totalWeight 参数:多个具有相同最短响应时间的服务提供者对应的预热(预热这个点还是挺重要的,在下面讲最小活跃数负载均衡的时候有详细说明)权重之和 。
firstWeight 参数:第一个具有最短响应时间的服务提供者的权重 。
sameWeight 参数:多个满足条件的提供者的权重是否一致 。
标号为②的部分
![2万字长文带你细细盘点五种负载均衡策略](http://img.jiangsulong.com/220416/114I615Z-6.jpg)
推荐阅读
- 带你走进潮汕工夫茶,工夫茶点心
- 带你了解安徽四大名茶,安徽茶打四大品牌
- 带你去看美团架构
- 万字长文讲解编码知识,看这文就够了!| 原力计划
- 一文带你彻底理解Linux的各种终端类型及概念
- 一篇长文学懂入门推荐算法库:surprise
- 电力负荷怎么计算?几分钟带你了解清楚,好东西,赶紧收藏
- 最新百度信息流产品手册,带你全面了解百度产品
- 三分钟带你了解香槟产区另一面,谈香槟,你也是行家
- 没有人比我更懂电流,今天带你重新认识电流