zoukankan      html  css  js  c++  java
  • 一个按权重(weight)进行LB的算法

    package netty;
    
    import com.google.common.collect.ImmutableList;
    import lombok.SneakyThrows;
    
    import java.util.List;
    import java.util.Objects;
    import java.util.Random;
    
    /**
     * Test
     *
     * @author xfyou
     */
    public class Test {
    
      @SneakyThrows
      public static void main(String[] args) {
        List<Integer> weightList = ImmutableList.of(0, 0, 0, 0);
        boolean allHaveTheSameWeight = isSameWeight(weightList);
        if (!allHaveTheSameWeight) {
          selectOneByWeight(weightList);
        } else {
          selectOneRandom(weightList);
        }
      }
    
      /**
       * 如果所有的权重都是一样的,则随机选择一个
       */
      private static void selectOneRandom(List<Integer> weightList) {
        System.out.println("selecded list index:" + new Random().nextInt(weightList.size()));
      }
    
      /**
       * 如果所有的权重不一样,则优化选择权重高的
       */
      private static void selectOneByWeight(List<Integer> weightList) {
        int offset = new Random().nextInt(weightList.stream().mapToInt(i -> i).sum());
        for (int i = 0, len = weightList.size(); i < len; i++) {
          offset -= weightList.get(i);
          if (offset < 0) {
            System.out.println("selected weight:" + weightList.get(i) + ", selected index:" + i);
            break;
          }
        }
      }
    
      /**
       * 判断所有的权重是否一样
       */
      private static boolean isSameWeight(List weightList) {
        boolean allHaveTheSameWeight = true;
        for (int i = 0, len = weightList.size(); i < len; i++) {
          if (i > 0) {
            if (!Objects.equals(weightList.get(i), weightList.get(i - 1))) {
              allHaveTheSameWeight = false;
              break;
            }
          }
        }
        return allHaveTheSameWeight;
      }
    
    }
  • 相关阅读:
    python--随机生成汉字、数字
    PyCharm详细教程
    Struts2 笔记
    Servlet读取配置文件的三种方式
    Java笔记(十)
    Java笔记(九)
    Java笔记(八)
    Java笔记(七)
    Java笔记(六)
    Java笔记(五)
  • 原文地址:https://www.cnblogs.com/frankyou/p/11435427.html
Copyright © 2011-2022 走看看