• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Java实现负载均衡的几种算法

java 搞代码 4年前 (2022-01-09) 31次浏览 已收录 0个评论

本篇文章主要介绍了详解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<b style="color:transparent">本文来源gao@!dai!ma.com搞$$代^@码网*</b>(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);  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持搞代码

更多Java实现负载均衡的几种算法相关文章请关注搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java实现负载均衡的几种算法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址