最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java實(shí)現(xiàn)負(fù)載均衡的幾種算法代碼

 更新時間:2017年02月11日 10:35:18   作者:魔流劍  
本篇文章主要介紹了詳解Java實(shí)現(xiàn)負(fù)載均衡的幾種算法代碼 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本篇文章主要介紹Java實(shí)現(xiàn)負(fù)載均衡的幾種算法,具體如下:

輪詢:

package class2.zookeeper.loadbalance;

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

/**
 * 負(fù)載均衡算法,輪詢法
 * @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,避免出現(xiàn)由於服務(wù)器上線和下線導(dǎo)致的並發(fā)問題
      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);
      }
    }
}

加權(quán)輪詢:

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;

/**
 * 加權(quán)隨機(jī)載均衡算法
 * @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,避免出現(xiàn)由於服務(wù)器上線和下線導(dǎo)致的並發(fā)問題
    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);
  }
}

隨機(jī):

package class2.zookeeper.loadbalance;

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

/**
 * 隨機(jī)負(fù)載均衡算法
 * @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,避免出現(xiàn)由於服務(wù)器上線和下線導(dǎo)致的並發(fā)問題
    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);
  }
}

加權(quán)隨機(jī):

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;

/**
 * 加權(quán)隨機(jī)載均衡算法
 * @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,避免出現(xiàn)由於服務(wù)器上線和下線導(dǎo)致的並發(fā)問題
    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;

/**
 * 負(fù)載均衡 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);
  }

   /**
   * 獲取請求服務(wù)器地址
   * @param remoteIp 負(fù)載均衡服務(wù)器ip
   * @return
   */
  public static String ipHash(String remoteIp)
  {
    //重新建立一個map,避免出現(xiàn)由於服務(wù)器上線和下線導(dǎo)致的並發(fā)問題
    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);
  }

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring-data-jpa使用自定義repository來實(shí)現(xiàn)原生sql

    spring-data-jpa使用自定義repository來實(shí)現(xiàn)原生sql

    這篇文章主要介紹了在spring-data-jpa中使用自定義repository來實(shí)現(xiàn)原生sql,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java對數(shù)器的使用講解

    Java對數(shù)器的使用講解

    今天小編就為大家分享一篇關(guān)于Java對數(shù)器的使用講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 詳解Java利用深度優(yōu)先遍歷解決迷宮問題

    詳解Java利用深度優(yōu)先遍歷解決迷宮問題

    深度優(yōu)先遍歷:深度優(yōu)先遍歷是圖論中的經(jīng)典算法。其利用了深度優(yōu)先搜索算法可以產(chǎn)生目標(biāo)圖的相應(yīng)拓?fù)渑判虮?,采用拓?fù)渑判虮砜梢越鉀Q很多相關(guān)的圖論問題,如最大路徑問題等等。本文將利用深度優(yōu)先遍歷解決迷宮問題,感興趣的可以了解一下
    2022-02-02
  • SpringBoot中的@ControllerAdvice注解原理詳解

    SpringBoot中的@ControllerAdvice注解原理詳解

    這篇文章主要介紹了SpringBoot中的@ControllerAdvice注解原理詳解,在SpringBoot應(yīng)用程序啟動過程中,Spring會掃描所有的類,尋找?guī)в蠤ControllerAdvice注解的類這些方法會被添加到一個映射表中,以便后續(xù)處理異常時能找到對應(yīng)的處理方法,需要的朋友可以參考下
    2024-01-01
  • Java圖片與二進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)示例講解

    Java圖片與二進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)示例講解

    這篇文章主要介紹了Java圖片與二進(jìn)制相互轉(zhuǎn)換實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • 5分鐘快速了解String.trim()到底做了什么事

    5分鐘快速了解String.trim()到底做了什么事

    trim方法一般用來去除空格,但是根據(jù)JDK API的說明,該方法并不僅僅是去除空格,它能夠去除從編碼'\u0000'至'\u0020'的所有字符,這篇文章主要給大家介紹了如何通過5分鐘快速了解String.trim()到底做了什么事,需要的朋友可以參考下
    2021-11-11
  • JAVA實(shí)現(xiàn)簡單搶紅包算法(模擬真實(shí)搶紅包)

    JAVA實(shí)現(xiàn)簡單搶紅包算法(模擬真實(shí)搶紅包)

    這篇文章主要介紹了JAVA實(shí)現(xiàn)簡單搶紅包算法(模擬真實(shí)搶紅包)的實(shí)例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • 話說Spring Security權(quán)限管理(源碼詳解)

    話說Spring Security權(quán)限管理(源碼詳解)

    本篇文章主要介紹了話說Spring Security權(quán)限管理(源碼詳解) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • springboot下配置多數(shù)據(jù)源的方法

    springboot下配置多數(shù)據(jù)源的方法

    本篇文章主要介紹了springboot下配置多數(shù)據(jù)源的方法,具有一定的參考價值,有興趣的可以了解一下
    2017-04-04
  • 詳解@Autowired(required=false)注入注意的問題

    詳解@Autowired(required=false)注入注意的問題

    這篇文章主要介紹了@Autowired(required=false)注入注意的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論

民权县| 新疆| 县级市| 临沧市| 顺义区| 嘉黎县| 黄梅县| 丽水市| 竹北市| 仁化县| 平泉县| 阳江市| 遵化市| 磐安县| 通江县| 剑川县| 恩施市| 白山市| 新民市| 马龙县| 西城区| 汉阴县| 格尔木市| 双柏县| 曲阳县| 满城县| 五峰| 瑞安市| 海宁市| 墨江| 新疆| 葫芦岛市| 大港区| 吉首市| 隆化县| 晴隆县| 沾益县| 鄂尔多斯市| 金乡县| 普洱| 安陆市|