成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:負載均衡的算法你了解不?

開發 架構 算法
上一篇文章我講了關于負載均衡的三種算法,輪詢法,隨機法,最小連接法,這三種負載均衡的算法,但是關于負載均衡還有其他的算法,我們也需要你去看,而且在面試的過程中,很有可能是會問到的呦。

 上一篇文章我講了關于負載均衡的三種算法,輪詢法,隨機法,最小連接法,這三種負載均衡的算法,但是關于負載均衡還有其他的算法,我們也需要你去看,而且在面試的過程中,很有可能是會問到的呦。

[[286766]]

對于要實現高性能集群,選擇好負載均衡器很重要,同時針對不同的業務場景選擇合適的負載均衡算法也是非常重要的。之前已經羅列出幾個了,接下來在說剩下的幾個算法,

1. 源地址哈希算法

唯一不丟失策略的算法,但是負載均衡和源數據信息和哈希算法有很大關系。

源地址哈希法的思想是根據服務消費者請求客戶端的 IP 地址,通過哈希函數計算得到一個哈希值,將此哈希值和服務器列表的大小進行取模運算,得到的結果便是要訪問的服務器地址的序號。采用源地址哈希法進行負載均衡,相同的 IP 客戶端,如果服務器列表不變,將映射到同一個后臺服務器進行訪問。

還是之前的操作,偽代碼:

 

  1. private static Map<String, Integer> serviceWeightMap = new HashMap<String, Integer>(); 
  2.  
  3. static { 
  4.     serviceWeightMap.put("192.168.1.100", 1); 
  5.     serviceWeightMap.put("192.168.1.101", 1); 
  6.     serviceWeightMap.put("192.168.1.102", 4); 
  7.     serviceWeightMap.put("192.168.1.103", 1); 
  8.    } 
  9.  
  10.    public static String testConsumerHash(String remoteIp) { 
  11.  
  12.        Map<String, Integer> serverMap = new HashMap<String, Integer>(); 
  13.        serverMap.putAll(serviceWeightMap); 
  14.  
  15.        //取得IP地址list 
  16.        Set<String> keySet = serverMap.keySet(); 
  17.        ArrayList<String> keyList = new ArrayList<String>(); 
  18.        keyList.addAll(keySet); 
  19.  
  20.        int hashCode = remoteIp.hashCode(); 
  21.        int pos = hashCode % keyList.size(); 
  22.  
  23.        return keyList.get(pos); 
  24.    } 

這段代碼來自 Will.Shun 所寫,我當時看到的時候也不是很明白什么意思,后來看了一下,其實和它的解釋很類似,通過哈希函數計算得到一個哈希值,將此哈希值和服務器列表的大小進行取模運算,得到的結果便是要訪問的服務器地址的序號。

2. 加權輪詢算法

再來看一下加權輪訓算法,我們先看一下在 Nginx 里面進行的權重配置:

 

  1. http { 
  2. upstream cluster { 
  3. server a weight=1; 
  4. server b weight=2; 
  5. server c weight=3; 

假如 Nginx 每收到 6 個客戶端的請求,會把其中的 1 個轉發給后端 a,把其中的 2 個轉發給后端 b,把其中的 3 個轉發給后端 c。

加權輪詢算法的結果,就是要生成一個服務器序列。每當有請求到來時,就依次從該序列中取出下一個服務器用于處理該請求。

加權輪訓算法偽代碼:

 

  1. private static Map<String, Integer> serviceWeightMap = new HashMap<String, Integer>(); 
  2.  
  3. static { 
  4.     serviceWeightMap.put("192.168.1.100", 1); 
  5.     serviceWeightMap.put("192.168.1.101", 1); 
  6.     serviceWeightMap.put("192.168.1.102", 4); 
  7.     serviceWeightMap.put("192.168.1.103", 1); 
  8.    } 
  9.  
  10.  
  11.     public static String testWeightRoundRobin() { 
  12.  
  13.         // 重新創建一個map,避免出現由于服務器上線和下線導致的并發問題 
  14.         Map<String, Integer> serverMap = new HashMap<String, Integer>(); 
  15.         serverMap.putAll(serviceWeightMap); 
  16.  
  17.         //取得IP地址list 
  18.         Set<String> keySet = serverMap.keySet(); 
  19.         Iterator<String> it = keySet.iterator(); 
  20.  
  21.         List<String> serverList = new ArrayList<String>(); 
  22.  
  23.         while (it.hasNext()) { 
  24.             String server = it.next(); 
  25.             Integer weight = serverMap.get(server); 
  26.             for (int i=0; i<weight; i++) { 
  27.                 serverList.add(server); 
  28.             } 
  29.         } 
  30.  
  31.         String server = null
  32.  
  33.         synchronized (pos) { 
  34.             if (pos > serverList.size()) { 
  35.                 pos = 0; 
  36.             } 
  37.  
  38.             server = serverList.get(pos); 
  39.             pos++; 
  40.         } 
  41.  
  42.         return server; 

其實在 加權輪訓算法中,是有缺陷的,在某些特殊的權重下,加權輪詢調度會生成不均勻的實例序列,這種不平滑的負載可能會使某些實例出現瞬時高負載的現象,導致系統存在宕機的風險。而為了解決這個調度的缺陷,后邊就有平滑加權輪訓調度,有興趣的同學一定要去看一下這個平滑加權輪訓。

3. 加權隨機算法

加權隨機法跟加權輪詢法類似,根據后臺服務器不同的配置和負載情況,配置不同的權重。不同的是,它是按照權重來隨機選取服務器的,而非順序。

 

  1. private static Map<String, Integer> serviceWeightMap = new HashMap<String, Integer>(); 
  2.  
  3.     static { 
  4.         serviceWeightMap.put("192.168.1.100", 1); 
  5.         serviceWeightMap.put("192.168.1.101", 1); 
  6.         serviceWeightMap.put("192.168.1.102", 4); 
  7.         serviceWeightMap.put("192.168.1.103", 1); 
  8.        } 
  9.  
  10.     public static String testWeightRandom() { 
  11.         // 重新創建一個map,避免出現由于服務器上線和下線導致的并發問題 
  12.         Map<String, Integer> serverMap = new HashMap<String, Integer>(); 
  13.         serverMap.putAll(serviceWeightMap); 
  14.  
  15.         //取得IP地址list 
  16.         Set<String> keySet = serverMap.keySet(); 
  17.         List<String> serverList = new ArrayList<String>(); 
  18.         Iterator<String> it = keySet.iterator(); 
  19.  
  20.         while (it.hasNext()) { 
  21.             String server = it.next(); 
  22.             Integer weight = serverMap.get(server); 
  23.             for (int i=0; i<weight; i++) { 
  24.                 serverList.add(server); 
  25.             } 
  26.         } 
  27.  
  28.         Random random = new Random(); 
  29.         int randomPos = random.nextInt(serverList.size()); 
  30.  
  31.         String server = serverList.get(randomPos); 
  32.  
  33.         return server; 
  34.     } 

這里不同的地方就是服務器是通過隨機算法獲取。

其實我們可以想一個實例:比如說在以下場景:有一個集合 S,里面比如有 A,B,C,D 這四項。這時我們想隨機從中抽取一項,但是抽取的概率不同,比如我們希望抽到 A 的概率是 50%,抽到 B 和 C 的概率是 20%,D 的概率是 10%。一般來說,我們可以給各項附一個權重,抽取的概率正比于這個權重。

4.HTTP 國際化

HTTP 報文中可以承載以任何語言表示的內容,就像它能承載圖像、影片,或任何類型的 媒體那樣。對 HTTP 來說,實體主體只是二進制信息的容器而已。

為了支持國際性的內容,服務器需要告知客戶端每個文檔的字母表和語言,這樣客戶端才 能正確地把文檔中的信息解包為字符并把內容呈現給用戶。

服務器通過 HTTP 協議的 Content-Type 首部中的 charset 參數和 Content-Language 首部告知客戶端文檔的字母表和語言。這些首部描述了實體主體的“信息盒子”里面裝的是 什么,如何把內容轉換成合適的字符以便顯示在屏幕上以及里面的詞語表示的是哪種語言。

同時,客戶端需要告知服務器用戶理解何種語言,瀏覽器上安裝了何種字母表編碼算法。客戶端發送 Accept-Charset 首部和 Accept-Language 首部,告知服務器它理解哪些字 符集編碼算法和語言以及其中的優先順序。

 

責任編輯:華軒 來源: Java極客技術
相關推薦

2019-12-27 09:29:46

負載均衡算法哈希算法

2023-10-31 16:38:02

注冊中心負載均衡器

2019-12-26 09:13:00

算法硬件軟件

2015-08-13 10:29:12

面試面試官

2021-02-25 07:08:30

JavaScript 前端面試題

2024-09-09 08:30:56

代碼

2020-09-07 06:28:37

Nginx靜態負載均衡動態負載均衡

2020-09-26 22:04:32

數據安全傳輸HTTPSHTTP 協議

2021-09-16 07:52:18

算法應用場景

2022-07-26 08:40:42

Java并發工具類

2022-08-02 06:31:32

Java并發工具類

2023-02-20 08:08:48

限流算法計數器算法令牌桶算法

2023-09-26 00:37:38

Spring微服務框架

2015-08-24 09:00:36

面試面試官

2021-11-25 10:18:42

RESTfulJava互聯網

2021-08-09 07:47:40

Git面試版本

2025-01-13 09:24:32

2020-07-30 07:58:36

加密算法

2022-07-11 10:47:46

容器JAVA

2022-06-30 08:14:05

Java阻塞隊列
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩中文字幕 | 一区二区三区高清 | 午夜专区| 亚洲一区二区三区在线 | 精品国产一区二区在线 | 不卡的av在线 | 狠狠插天天干 | 3p视频在线观看 | 羞羞视频网站 | 色欧美片视频在线观看 | 我想看一级黄色毛片 | 你懂的免费在线 | 中国一级毛片免费 | 国产欧美日韩综合精品一 | 一区二区日韩 | 日韩在线不卡 | 久久久久av| 成人免费视频在线观看 | 中国一级特黄毛片大片 | 久久久99国产精品免费 | 色噜噜色综合 | 精品日韩在线 | 亚洲成人综合在线 | 天天操夜夜拍 | 欧美激情网站 | 国产粉嫩尤物极品99综合精品 | 午夜影视 | 免费看黄色国产 | 国产精品一二三区 | 草久久免费视频 | 欧美精品福利 | 亚洲成人免费在线观看 | 亚洲精品久久久久国产 | 亚洲图片视频一区 | www亚洲成人 | 美女黄18岁以下禁止观看 | 国产精品久久久久久久久动漫 | 日韩国产三区 | 日韩欧美电影在线 | 国产精品日韩欧美一区二区 | 亚洲伊人久久综合 |