zoukankan      html  css  js  c++  java
  • 今日份奇思妙想——根据权重负载均衡

    public class WeightProcessor {
    
        private final Map<Integer, List<String>> map = new HashMap<>(); //保存权重值和地址
        private final Integer[] weight; //保存权重值,用于负载均衡
        private final Random random = new Random();
    
        WeightProcessor(Map<String, Integer> map) {
            List<Integer> list = new ArrayList<>();
    
            map.forEach((k, v) -> {
                for (int i = 0; i < v; i++) {
                    list.add(v);
                }
                if (this.map.get(v) == null) {
                    this.map.put(v, new ArrayList<String>(){{add(k);}});
                } else {
                    this.map.get(v).add(k);
                }
            });
    
            this.weight = list.toArray(new Integer[list.size()]);
        }
    
        public String getAddress() {
            int num = random.nextInt(weight.length);
            List<String> list = map.get(weight[num]);
            num = random.nextInt(list.size());
            return list.get(num);
        }
    
        public static void main(String[] args) {
    
            Map<String, Integer> map = new HashMap<String, Integer>(){{
                put("127.0.0.1:8080", 2);
                put("127.0.0.1:8888", 8);
                put("127.0.0.1:6666", 2);
            }};
    
            WeightProcessor processor = new WeightProcessor(map);
            System.out.println(processor.getAddress());
            System.out.println(processor.getAddress());
            System.out.println(processor.getAddress());
            System.out.println(processor.getAddress());
            System.out.println(processor.getAddress());
            System.out.println(processor.getAddress());
            System.out.println(processor.getAddress());
            System.out.println(processor.getAddress());
            System.out.println(processor.getAddress());
            System.out.println(processor.getAddress());
        }
    }

    主方法中的是测试方法,思路是将配置文件中的数据以Map的形式读取出来,然后创建负载处理器,根据负载会选择一个节点的地址进行访问。

  • 相关阅读:
    phpfpm进程数设置多少合适
    GitLab的安装及使用教程
    男人的中年危机坏在哪?(转载)
    让敏捷落地,从“认识自我”开始
    优化你的架构设计
    工作中的那点事儿是工作经验,还是思路给了你生存的能力(原创)
    窗口过程处理WndProc遇到的问题
    CodeBlocks 10.0+OpenCV 2.4.0配置方法
    OpenCV在VS2010下永久性配置
    Win8下的STCISP下载问题解决
  • 原文地址:https://www.cnblogs.com/wxdmw/p/14889806.html
Copyright © 2011-2022 走看看