權重輪詢調度算法(WeightedRound-RobinScheduling)-Java實現3

權重輪詢調度算法(WeightedRound-RobinScheduling)-Java實現3

以前兩篇相關博文:
權重輪詢調度算法(WeightedRound-RobinScheduling)-Java實現
http://www.cnblogs.com/huligong1234/p/3819979.html

權重輪詢調度算法(WeightedRound-RobinScheduling)-Java實現2
http://www.cnblogs.com/huligong1234/p/3862665.html

以前兩篇講到的方案都稍複雜些,在實際項目中,對權重輪詢精確要求不高的狀況下,還能夠有更簡便的方式,就是利用Java自帶的Random來實現。
(固然也能夠利用Collections.shuffle()來達到目的)
示例代碼以下:html

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
* 權重輪詢調度算法(WeightedRound-RobinScheduling)-Java實現
* @author huligong
* */
public class WeightedRoundRobinScheduling {

    public static void main(String[] args) {
        Map<String,Integer> serverWeight = new HashMap<String,Integer>();
        serverWeight.put("192.168.1.100", 6);//ip,權重
        serverWeight.put("192.168.1.101", 3);
        serverWeight.put("192.168.1.102", 2);
        serverWeight.put("192.168.1.104", 1);
        
        String ip = getServer(serverWeight);
    }
    
    public static String getServer(Map<String,Integer> serverWeight){
        Random random = new Random();
        
        ArrayList<String> serverList = new ArrayList<String>();
        for(Map.Entry<String, Integer> m : serverWeight.entrySet()){
            for(int i=0,len=m.getValue();i<len;i++){
                serverList.add(m.getKey());
            }
        }
        
        String[] servers = serverList.toArray(new String[serverList.size()]);
        int weight_idx = random.nextInt(servers.length);
        String ip = servers[weight_idx];
        return ip;
    }

}
相關文章
相關標籤/搜索