zoukankan      html  css  js  c++  java
  • 负载均衡的几种算法Java实现代码

    轮询

    package class2.zookeeper.loadbalance;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * 負載均衡算法,輪詢法
     * @author guoy
     *
     */
    public class TestRoundRobin {
    
        
        static Map<String,Integer> serverWeigthMap  = new HashMap<String,Integer>();
    
         static{
            serverWeigthMap.put("192.168.1.12", 1);
            serverWeigthMap.put("192.168.1.13", 1);
            serverWeigthMap.put("192.168.1.14", 2);
            serverWeigthMap.put("192.168.1.15", 2);
            serverWeigthMap.put("192.168.1.16", 3);
            serverWeigthMap.put("192.168.1.17", 3);
            serverWeigthMap.put("192.168.1.18", 1);
            serverWeigthMap.put("192.168.1.19", 2);
        }
         Integer  pos = 0;
         public  String roundRobin()
            {
                //重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
                Map<String,Integer> serverMap  = new HashMap<String,Integer>();
                serverMap.putAll(serverWeigthMap);
                //獲取ip列表list
                Set<String> keySet = serverMap.keySet();
                ArrayList<String> keyList = new ArrayList<String>();
                keyList.addAll(keySet);
                
                String server = null;
                
                synchronized (pos) {
                    if(pos >=keySet.size()){
                        pos = 0;
                    }
                    server = keyList.get(pos);
                    pos ++;
                }
                return server;
            }
            
            public static void main(String[] args) {
                TestRoundRobin robin = new TestRoundRobin();
                for (int i = 0; i < 20; i++) {
                    String serverIp = robin.roundRobin();
                    System.out.println(serverIp);
                }
            }
    }

    加权轮询

    package class2.zookeeper.loadbalance;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    import java.util.Set;
    
    /**
     * 加權隨機载均衡算法
     * @author guoy
     *
     */
    public class TestWeightRandom {
        
        static Map<String,Integer> serverWeigthMap  = new HashMap<String,Integer>();
    
         static{
            serverWeigthMap.put("192.168.1.12", 1);
            serverWeigthMap.put("192.168.1.13", 1);
            serverWeigthMap.put("192.168.1.14", 2);
            serverWeigthMap.put("192.168.1.15", 2);
            serverWeigthMap.put("192.168.1.16", 3);
            serverWeigthMap.put("192.168.1.17", 3);
            serverWeigthMap.put("192.168.1.18", 1);
            serverWeigthMap.put("192.168.1.19", 2);
        }
    
        public static String weightRandom()
        {
            //重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
            Map<String,Integer> serverMap  = new HashMap<String,Integer>();
            serverMap.putAll(serverWeigthMap);
            //獲取ip列表list
            Set<String> keySet = serverMap.keySet();
            Iterator<String> it = keySet.iterator();
    
            List<String> serverList = new ArrayList<String>();
    
            while (it.hasNext()) {
                String server = it.next();
                Integer weight = serverMap.get(server);
                for (int i = 0; i < weight; i++) {
                    serverList.add(server);
                }
            }        
            Random random = new Random();
            int randomPos = random.nextInt(serverList.size());
            
            String server = serverList.get(randomPos);
            return server;
        }
        
        public static void main(String[] args) {
            String serverIp = weightRandom();
            System.out.println(serverIp);
        }
    }

    随机

    package class2.zookeeper.loadbalance;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;
    import java.util.Set;
    
    /**
     * 隨機负载均衡算法
     * @author guoy
     *
     */
    public class TestRandom {
        
        static Map<String,Integer> serverWeigthMap  = new HashMap<String,Integer>();
    
         static{
            serverWeigthMap.put("192.168.1.12", 1);
            serverWeigthMap.put("192.168.1.13", 1);
            serverWeigthMap.put("192.168.1.14", 2);
            serverWeigthMap.put("192.168.1.15", 2);
            serverWeigthMap.put("192.168.1.16", 3);
            serverWeigthMap.put("192.168.1.17", 3);
            serverWeigthMap.put("192.168.1.18", 1);
            serverWeigthMap.put("192.168.1.19", 2);
        }
    
        public static String random()
        {
            //重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
            Map<String,Integer> serverMap  = new HashMap<String,Integer>();
            serverMap.putAll(serverWeigthMap);
            //獲取ip列表list
            Set<String> keySet = serverMap.keySet();
            ArrayList<String> keyList = new ArrayList<String>();
            keyList.addAll(keySet);
            
            Random random = new Random();
            int randomPos = random.nextInt(keyList.size());
            
            String server = keyList.get(randomPos);
            return server;
        }
        
        public static void main(String[] args) {
            String serverIp = random();
            System.out.println(serverIp);
        }
    }

    加权随机

    package class2.zookeeper.loadbalance;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    import java.util.Set;
    
    /**
     * 加權隨機载均衡算法
     * @author guoy
     *
     */
    public class TestWeightRandom {
        
        static Map<String,Integer> serverWeigthMap  = new HashMap<String,Integer>();
    
         static{
            serverWeigthMap.put("192.168.1.12", 1);
            serverWeigthMap.put("192.168.1.13", 1);
            serverWeigthMap.put("192.168.1.14", 2);
            serverWeigthMap.put("192.168.1.15", 2);
            serverWeigthMap.put("192.168.1.16", 3);
            serverWeigthMap.put("192.168.1.17", 3);
            serverWeigthMap.put("192.168.1.18", 1);
            serverWeigthMap.put("192.168.1.19", 2);
        }
    
        public static String weightRandom()
        {
            //重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
            Map<String,Integer> serverMap  = new HashMap<String,Integer>();
            serverMap.putAll(serverWeigthMap);
            //獲取ip列表list
            Set<String> keySet = serverMap.keySet();
            Iterator<String> it = keySet.iterator();
    
            List<String> serverList = new ArrayList<String>();
    
            while (it.hasNext()) {
                String server = it.next();
                Integer weight = serverMap.get(server);
                for (int i = 0; i < weight; i++) {
                    serverList.add(server);
                }
            }        
            Random random = new Random();
            int randomPos = random.nextInt(serverList.size());
            
            String server = serverList.get(randomPos);
            return server;
        }
        
        public static void main(String[] args) {
            String serverIp = weightRandom();
            System.out.println(serverIp);
        }
    }

    ip hash

    package class2.zookeeper.loadbalance;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * 负载均衡 ip_hash算法
     * @author guoy
     *
     */
    public class TestIpHash {
    
        
        static Map<String,Integer> serverWeigthMap  = new HashMap<String,Integer>();
    
         static{
            serverWeigthMap.put("192.168.1.12", 1);
            serverWeigthMap.put("192.168.1.13", 1);
            serverWeigthMap.put("192.168.1.14", 2);
            serverWeigthMap.put("192.168.1.15", 2);
            serverWeigthMap.put("192.168.1.16", 3);
            serverWeigthMap.put("192.168.1.17", 3);
            serverWeigthMap.put("192.168.1.18", 1);
            serverWeigthMap.put("192.168.1.19", 2);
        }
    
         /**
          * 获取请求服务器地址
          * @param remoteIp 负载均衡服务器ip
          * @return
          */
        public static String ipHash(String remoteIp)
        {
            //重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
            Map<String,Integer> serverMap  = new HashMap<String,Integer>();
            serverMap.putAll(serverWeigthMap);
            //獲取ip列表list
            Set<String> keySet = serverMap.keySet();
            ArrayList<String> keyList = new ArrayList<String>();
            keyList.addAll(keySet);
            
            int hashCode =remoteIp.hashCode();
            int serverListSize = keyList.size();
            int serverPos = hashCode % serverListSize;
            
            return keyList.get(serverPos);
        }
        
        public static void main(String[] args) {
            String serverIp = ipHash("192.168.1.12");
            System.out.println(serverIp);
        }
    
    }
  • 相关阅读:
    (HDU)1393 -- Weird Clock (奇怪的时钟)
    (HDU)1391 -- Number Steps (数字阶梯)
    (HDU)1390 -- Binary Numbers(二进制数)
    (HDU)1339 -- A Simple Task(简单任务)
    (HDU)1335 -- Basically Speaking(基础和交流)
    论文笔记:Fully-Convolutional Siamese Networks for Object Tracking
    论文笔记:Visual Object Tracking based on Adaptive Siamese and Motion Estimation Network
    论文笔记:Attentional Correlation Filter Network for Adaptive Visual Tracking
    论文笔记:Deep Attentive Tracking via Reciprocative Learning
    Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking---随笔
  • 原文地址:https://www.cnblogs.com/wxd0108/p/5465938.html
Copyright © 2011-2022 走看看