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库--pandas--文本文件读取
    python库--flashtext--大规模数据清洗利器
    PyCharm--帮助文档
    Git--命令
    symfony doctrine generate entity repository
    [转]MySQL性能优化的最佳20+条经验
    svn使用
    一致性hash
    JavaScript学习笔记 1
    curl发出请求
  • 原文地址:https://www.cnblogs.com/frankyou/p/11435427.html
Copyright © 2011-2022 走看看