Dubbo -- 四种loadBalance负载均衡算法
Dubbo中的一个关键接口LoadBalance,dubbo是按照其中的规则来调用多台provider的服务的。
先看一下接口的实现类图:
从上图中我们可以看到dubbo提供了四种算法来实现负载均衡。
1.RandomLoadBalance:随机,按权重设置随机概率。
从字面意思也很好理解,根据每个invoker提前设置好的权重随机分配,看一下源码的实现:
可以看出其实现逻辑是如果所有的invoker的权重都一样,则随机给出一个invoker,
否则按照权重进行分配,按照权重进行分配相信大家都有接触过,但是dubbo的这种实现方式还是很优雅,很值得学习和借鉴的,就是我上图中标记出的部分,
可以看到dubbo是将所有的invoker的权重都加起来,在这个总权重范围内随机生成一个数字,用这个数字依次减去没个invoker的权重,当值变为<时,即是这个invoker来执行。
例如,有四个invoker,权重分别是:1,2,3,4,总权重为10,随机生成数字为5,则5-1=4,4-2=2,2-3=-1<0,即可判定是权重为3的invoker来执行,
按照这个逻辑:
权重为1的会执行的随机数:0.
权重为2的会执行的随机数:1~2.
权重为3的会执行的随机数:3,4,5.
权重为4的会执行的随机数:6,7,8,9.
2.ConsistentHashLoadBalance:一致性哈希算法
相同参数的请求总是发到同一提供者。
但是缺省只对第一个参数进行hash,请注意这些默认参数:
3.LeastActiveLoadBalance:最小活跃数负载均衡
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
这里牵扯到一个问题,如何统计活跃数呢?我们来看源码实现:
每次调用该invoker时会将数字+1,调用完成后-1,这样执行慢的invoker在同一时间节点上的活跃数字就会比较大,快的就会比较小
当只有一个最小活跃数的invoker时直接返回该invoker
当多个invoker活跃数一致但权重不一致时就根据上文的随机权重算法进选择
当多个invoker活跃数一致权重也一致时,就从中随机进行返回。
4.RoundRobinLoadBalance:根据权重进轮训,轮训的缺点就是无法顾及invoker的执行效率,有可能将请求积压在某一处理较慢的provider上。
参考大神文章:https://www.jianshu.com/p/53feb7f5f5d9
Dubbo -- 四种loadBalance负载均衡算法的更多相关文章
- IPVS和Nginx两种WRR负载均衡算法详解
动机 五一临近,四月也接近尾声,五一节乃小长假的最后一天.今天是最后一天工作日,竟然感冒了,半夜里翻来覆去无法安睡,加上窗外大飞机屋里小飞机(也就是蚊子)的骚扰,实在是必须起来做点有意义的事了! ...
- 负载均衡算法,轮询方式 大话设计模式之工厂模式 C#
负载均衡算法,轮询方式 2018-04-13 17:37 by 天才卧龙, 13 阅读, 0 评论, 收藏, 编辑 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现 ...
- Dubbo的负载均衡算法源码分析
Dubbo提供了四种负载均衡:RandomLoadBalance,RoundRobinLoadBalance,LeastActiveLoadBalance,ConsistentHashLoadBala ...
- 几种简单的负载均衡算法及其Java代码实现
什么是负载均衡 负载均衡,英文名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助.通过某种负载分担技 ...
- Nginx几种负载均衡算法及配置实例
本文装载自: https://yq.aliyun.com/articles/114683 Nginx负载均衡(工作在七层"应用层")功能主要是通过upstream模块实现,Ngin ...
- Ribbon提供的负载均衡算法IRule(四)
一.Ribbon算法的介绍 Ribbon的源码地址:https://github.com/Netflix/ribbon IRule:根据特定算法中从服务器列表中选取一个要访问的服务,Ribbon默认的 ...
- 负载均衡算法(四)IP Hash负载均衡算法
/// <summary> /// IP Hash负载均衡算法 /// </summary> public static class IpHash { static Dicti ...
- Dubbo加权轮询负载均衡的源码和Bug,了解一下?
本文是对于Dubbo负载均衡策略之一的加权随机算法的详细分析.从2.6.4版本聊起,该版本在某些情况下存在着比较严重的性能问题.由问题入手,层层深入,了解该算法在Dubbo中的演变过程,读懂它的前世今 ...
- Dubbo一致性哈希负载均衡的源码和Bug,了解一下?
本文是对于Dubbo负载均衡策略之一的一致性哈希负载均衡的详细分析.对源码逐行解读.根据实际运行结果,配以丰富的图片,可能是东半球讲一致性哈希算法在Dubbo中的实现最详细的文章了. 文中所示源码,没 ...
随机推荐
- Win10系统下安装ubuntu16.04双系统-常见问题解答
Win10系统下安装ubuntu16.04双系统-常见问题解答 1. 安装ubuntu16.04.2系统 磁盘分区形式有两种:GPT和MBR,关系到设置引导项.在win10下压缩出500GB空间给ub ...
- process.env.NODE_ENV理解
1.理解NODE_ENV 在node中,有全局变量process表示的是当前的node进程.process.env包含着关于系统环境的信息.但是process.env中并不存在NODE_ENV这个东西 ...
- hadoop大作业
1.数据准备 2.把CSV添加到/bigdatacase/dataset中 3.检查前5行并删除第一行 4.将csv文件导入hadoop并检查前10行数据情况 5.数据文件导入hive 6.在Hive ...
- Linux Shell 之 对文件中的行、单词、字符进行迭代
在进行文本文件进行处理时,对文件件中的行.单词.字符进行迭代和遍历是非常常用的操作.而将一个简单的循环用于迭代,再加上来自stdin或文件的重定向,这就是对文件中的行.单词.和字符进行迭代的基本方法. ...
- 【Nginx】Nginx服务器配置调优
1.Nginx服务器配置调优 .设置nginx全局参数 vi /usr/local/nginx/conf/nginx.conf #编辑 worker_processes ; # 工作进程数,为CPU的 ...
- window 10 打开某个 窗口常用命令
1. ctrl +R ,输入:inetcpl.cpl 2. ctrl +R ,输入:services.msc 3. ctrl +R ,输入:msconfig 安装双系统,设置开机引导 4. ctrl ...
- MSYS2 编译环境配置
博客转载自:https://medium.com/@fzubair/carnd-term2-gcc-setup-on-windows-287e1fd36845 2018/6/2 — mingw32/c ...
- [LeetCode] 774. Minimize Max Distance to Gas Station 最小化加油站间的最大距离
On a horizontal number line, we have gas stations at positions stations[0], stations[1], ..., statio ...
- springmvc中跨域问题
对于web框架中的跨域问题是一个非常普遍的问题,常见的解决方案也有很多,如:jsonp.cros.websocket等.下面是最近处理springmvc中使用cors解决跨域问题的一些总结. Filt ...
- ztree实现拖拽移动和复制
1.官网下载ztree:http://www.treejs.cn/v3/api.php 2.引入jquery.ztree.all.min.js 注意,这是基于jQuery的插件,请引入相关js 3.设 ...