美文网首页
负载均衡指定权重-加权随机数

负载均衡指定权重-加权随机数

作者: 王小杰at2019 | 来源:发表于2019-02-10 14:02 被阅读11次

加权随机数

加权随机数一般用于资源调度场景,比如说在服务部署的时候每台机器的性能不一样那么我们就不能用平均负载,如果使用评价负载容量小的机器肯定承受不住,那么我们就需要指定权重例如例如 nginx 中的

upstream debugo_servers {
    server debugo03:80 weight=5;
    serv7er debugo04:80 weight=10;
}

这个是nginx给定的,有时候我们需要自己实现这个功能那么就可以用下面的代码了

public class WeightRandom {  
      
    public static Map<String, Integer> servers = new HashMap<String, Integer>();  
  
    static{  
        servers.put("192.168.20.101", 1);  
        servers.put("192.168.20.102", 2);  
        servers.put("192.168.20.103", 3);  
        servers.put("192.168.20.104", 4);  
    }  
      
    public static String selectServer(Map<String, Integer> servers){  
        if(servers == null || servers.size() == 0) return null;  
          
        Integer sum = 0;  
        Set<Map.Entry<String, Integer>> entrySet = servers.entrySet();  
        Iterator<Map.Entry<String, Integer>> iterator = entrySet.iterator();  
        while(iterator.hasNext()){  
            sum += iterator.next().getValue();  
        }  
        Integer rand =(int)(Math.random()* sum) + 1;

        for(Map.Entry<String, Integer> entry : entrySet){  
            rand -= entry.getValue();  
            if(rand <=0){  
                return entry.getKey();  
            }  
        }  
          
        return null;  
    }  
      
    public static void main(String[] args){  
        Map<String, Integer> map = new HashMap<String, Integer>();  
        String key = null;  
        for(int i = 0; i < 1000; i++){  
            key = selectServer(servers);  
            if(map.containsKey(key)){  
                map.put(key, map.get(key) + 1);  
            }else{  
                map.put(key, 1);  
            }  
        }  
        for(String key1 : map.keySet()){  
            System.out.println(key1 + " " + map.get(key1));  
        }  
    }  
      
}  

运行结果

根据运行结果我们可以看到 101大概在100 左右,102 大概在200左右 103 大概在300左右,104 大概在400左右, 我们循环的次数越多偏离的就越少,随机数没有绝对的

192.168.20.104 423
192.168.20.101 93
192.168.20.103 304
192.168.20.102 180

相关文章

  • 负载均衡指定权重-加权随机数

    加权随机数 加权随机数一般用于资源调度场景,比如说在服务部署的时候每台机器的性能不一样那么我们就不能用平均负载,如...

  • 【问答】中间件

    nginx的请求转发算法,如何配置根据权重转发 负载均衡策略:内置策略:轮询(默认)、加权轮询(处理1次连接则权重...

  • 常见的负载均衡算法

    前言 前不久公司有个需求是任务需要按照权重分配来选择,当时就想到负载均衡算法里的加权随机法,因此对常见的负载均衡算...

  • 负载均衡 Nginx、Dubbo、Ribbon

    概述 Dubbo负载均衡:支持4种,引入了JVM预热时间加权、权重自定义配置的规则,同时支持控制台动态配置权重值参...

  • Nginx-进阶学习

    目录: Nginx集群和负载均衡 一、Nginx集群和负载均衡 1、集群 2、负载均衡-权重(1)负载均衡-轮训:...

  • Dubbo的四种负载均衡方式

    (1) 基于权重的轮询负载均衡 计算权重,根据权重配置查询次数,然后轮询。 (2)基于权重的随机负载均衡 ...

  • java笔记-代码简单实现负载均衡

    本文使用java代码实现简单的负载均衡 服务器负载均衡选择 随机法 加权随机法 轮训法 加权轮训法 废话不多说,直...

  • Nginx中的负载均衡算法

    负载均衡算法 轮询(Round Robin)nginx默认负载均衡算法,可以配合权重使用,默认情况权重是1。ups...

  • loadBalance 的负载均衡解释

    负载均衡解释?客户端通过负载均衡算法,从服务列表中选择服务地址,进行连接的过程,负载均衡算法有, 轮询、随机、加权...

  • Nginx负载均衡_轮训策略与加权轮询

    章节目录 Nginx 负载均衡调度策略 加权轮询演示 ip_hash url_hash Nginx 负载均衡调度策...

网友评论

      本文标题:负载均衡指定权重-加权随机数

      本文链接:https://www.haomeiwen.com/subject/ppzteqtx.html