1. 程式人生 > 其它 >今日份奇思妙想——根據權重負載均衡

今日份奇思妙想——根據權重負載均衡

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的形式讀取出來,然後建立負載處理器,根據負載會選擇一個節點的地址進行訪問。