首先了解一下负载均衡。

百度百科:

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

个人理解,负载均衡,顾名思义,就是让硬件或服务,所受的负载,尽量均衡一点。

物尽其用,如250G固态硬盘和1T机械硬盘。

作为系统盘,则选择用250G的固态,读取和写入的速度块。

有很多学习资源要存,容量较大,那么就会1T的机械硬盘。

择优选择,打疫苗时,A,B,C三个医院,A医院爆满,C医院人数较少,那么就去C医院。

Dubbo四种负载均衡

①:随机权重(Random LoadBalance)。(dubbo默认)
A:权重40  占比2/5
B:权重20  占比1/5
C:权重40  占比2/5
则每次请求,都是随机访问的,可能A,可能B,可能C。数据量大的情况下,就会形成权重的比例。

②:轮询(RoundRobin LoadBalance)
轮循,按公约后的权重设置轮循比率。(可以根据权重轮询,如2/5,1/5,2/5。5个请求,则 A-B-C-A-C)无权重则A-B-C-A-B-C....
存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

③:最少活跃调用数(LeastActive LoadBalance)
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
A:200ms
B:200ms
C:300ms
先看一下上次调用时间,请求优先调用A和B,随机选择。统计上一次的调用时间

④:一致性hash(ConsistentHash LoadBalance)
一致性 Hash,相同参数的请求总是发到同一提供者。
当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
算法参见:http://en.wikipedia.org/wiki/Consistent_hashing
缺省只对第一个参数 Hash,如果要修改,请配置 <dubbo:parameter key="hash.arguments" value="0,1" />
缺省用 160 份虚拟节点,如果要修改,请配置 <dubbo:parameter key="hash.nodes" value="320" />

方法名,和第一个参数名,getUser?id=1,调用服务A,则下次同方法同参数,会继续调用服务A,除非服务A挂掉,那么就会根据虚拟节点,平摊给其他服务提供者。算法处理。

个人理解的权重算法

 /*** <h3>根据权重获取对应服务,传入服务:权重map</h3>** @param map 服务:权重map* @return java.lang.String* @author Hubers * @date 2021/6/15 16:16**/public static String getServerByWeight(Map<String, Integer> map) {if (map.isEmpty()){return null;}Integer total = 0;// 计算所有权重,如100+200+300=600for (Integer value : map.values()) {total += value;}Random random = new Random();// 在权重范围内随机,600以内随机int nextInt = random.nextInt(total);// 遍历所有服务提供者provide的ip地址for (String ip : map.keySet()) {// 取出权重值Integer weight = map.get(ip);// 权重在范围内,则返回对应ipif (nextInt < weight) {return ip;}// 否则减去权重,继续下一次循环,匹配对应的ipnextInt -= weight;}return null;}public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("192.168.1.1", 10);map.put("192.168.1.2", 10);map.put("192.168.1.3", 10);map.put("192.168.1.4", 10);for (int i = 0; i < 10; i++) {String weight = getServerByWeight(map);if (Objects.isNull(weight)) {throw new RuntimeException("无可用服务");}System.out.println(weight);}}

JAVA权重算法(如Dubbo的负载均衡权重)相关推荐

  1. Dubbo的负载均衡、集群容错、服务降级等机制详解

    文章目录 1. Dubbo与RPC的关系 2. Dubbo的基本使用 2.1 Dubbo是什么? 2.2 负载均衡 2.3 服务超时 2.4 集群容错 2.5 服务降级 2.6 本地存根 2.7 参数 ...

  2. Dubbo的负载均衡

    转自Dubbo官网:http://dubbo.io/ 负载均衡 什么是负载均衡?        在集群负载均衡时,Dubbo提供了多种均衡策略,缺省的话位random随机调用. 在具体实现上,通过负载 ...

  3. dubbo的负载均衡详解

    本文来详细说下dubbo的负载均衡,常见的概念,性质,原理等. 文章目录 负载均衡概述 dubbo中的负载均衡 对多注册中心负载均衡 对多服务负载均衡 dubbo中的负载均衡算法详解 整体结构 Ran ...

  4. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(1)

    1.什么是 Dubbo? Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错 ...

  5. 负载均衡轮询算法和服务器性能,负载均衡算法

    对于要实现高性能集群,选择好负载均衡器很重要,同时针对不同的业务场景选择合适的负载均衡算法也是非常重要的. 一.负载均衡算法分类 任务平分类 负载均衡系统将收到的任务平均分配给服务器进行处理,这里的& ...

  6. 负载均衡权重系数算法 C++

    为保证程序的稳定性和质量,内存要求使用智能指针(c++11),同时使用了boost(智能指针使用c++11). 1 自定义标准头文件se_std.h #ifndef H_CF4BC297_2737_4 ...

  7. Dubbo(十三)dubbo的负载均衡配置策略

    在dubbo的服务提供者集群时,消费端请求分发到哪一个节点,这时就牵扯到dubbo负载均衡问题.dubbo负载均衡有五种配置模式,分别为: 无策略配置,全完随机分发: 根据服务权重配置比例,随机分发: ...

  8. Dubbo的负载均衡策略

    什么是负载均衡? 先来看一下稍微官方点的解释.下面这段话摘自维基百科对负载均衡的定义: 负载均衡改善了跨多个计算资源(例如计算机,计算机集群,网络链接,中央处理单元或磁盘驱动)的工作负载分布.负载平衡 ...

  9. 加权轮询算法PHP,PHP实现负载均衡的加权轮询方法分析

    本文实例讲述了PHP实现负载均衡的加权轮询方法.分享给大家供大家参考,具体如下: 1. 负载均衡算法有哪些? 轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务 ...

最新文章

  1. Ubuntu18.04运行ORB_SLAM2
  2. c语言boolean作为全局变量_最容易忽略的C语言知识点细节,编程大牛进阶之路!...
  3. 用页传值方式解决模态窗口的Response.WriteFile文件下载
  4. 音视频流媒体的原理以及基础入门知识
  5. 数据中心在疫情期间发挥的作用
  6. UVa --10566
  7. 2017年 JavaScript 框架回顾 -- React生态系统
  8. 跟我一起学.NetCore之.NetCore概述
  9. 数据库如何进行索引优化
  10. asp多表查询并显示_高级子查询
  11. 某银行软件中心产品开发流程
  12. Git工作笔记004---torisegit使用时Updates were rejected because the tip of your current branch i
  13. 【转】ASP.NET使用ECharts展示后台数据
  14. c iostream.源码_通达信三线注意买入主图指标公式【源码分享】
  15. KITTI数据集解析
  16. 从CI/CD持续集成部署到DevOps研发运维一体化
  17. 从一循环到150,并在每行打印一个值,另外在每个3的倍数行上打印出“foo“,在5的倍数行打印biz,在7的倍数行打印baz
  18. markdown表格内如何进行换行
  19. html游动文字如何设置颜色,pr游动字幕怎么做
  20. 广域红外望远镜的最新发现:最冷的恒星

热门文章

  1. 优漫动游平面设计的形式美
  2. 微软的拼音输入法可以带声调进行
  3. 如何理解Vue的渐进式?
  4. 发送报警信息到微信公众号
  5. Onboard SDK文档
  6. Python面向对象06/反射/双下方法
  7. 不能整除7的整数C语言,求1-1000中能被3整除,且不能被7整除,且至少有一位数是5的整数...
  8. Python输出[m,n]既能被3整除又能被7整除的数的个数
  9. 什么是分布式存储?(IPFS, FileCoin, Sia, Storj Swarm)
  10. android什么意思!读完我这份《Android开发核心源码精编解析》面试至少多要3K!面试建议