負載均衡之隨機法

2021-09-18 09:08:00 字數 1694 閱讀 5046

​ 負載均衡(loadbalance),它的職責是將網路請求,或者其他形式的負載「均攤」到不同的機器上。避免集群中部分伺服器壓力過大,而另一些伺服器比較空閒的情況。通過負載均衡,可以讓每台伺服器獲取到適合自己處理能力的請求。

​ 常見的負載均衡的實現方法有多種,如隨機、輪詢、hash一致性等。本文使用隨機法實現負載均衡。

​ 隨機數法就是幾個數中隨機獲取乙個數字,然後獲取這個資料對應的伺服器。

/**

* 伺服器類

*/public class server

public string getservername()

public void setservername(string servername)

@override

public string tostring() ";

}}

public class loadbalance_random 

public static void main(string args)

} /**

* 選擇伺服器

* @param serverlist

* @return

*/private static server doselect(listserverlist)

}

​ 執行main方法測試,結果如下:

​ 在每台伺服器的配置效能等各方面都一樣時,使用這種隨機方法也是可取的,因為每台伺服器獲取的要處理的請求的資料量的概率是一樣的。但是有時候,我們的伺服器不一定都是相同的配置,每一台伺服器的效能都有一定的差異性,導致伺服器提供服務的能力的差異,比如上邊我們有3臺伺服器,server1每秒可處理5個請求,server2每秒只能處理3個請求,server3每秒只能處理2個請求,此時如果我們有10個請求過來了,我們分別給3個server3個請求處理,由於server3只能處理2個請求,這時就會導致服務3不可用。

​ 對這種不同服務能力的服務實現負載均衡,我們可以使用加權隨機法。對每個服務標記權重,提高處理能力強的伺服器的權重,降低服務能力若的伺服器的權重,即根據能力的大小分配對應比例的請求數。

​ 修改上述**,給服務加權重

/**

* 伺服器類

*/public class server

@override

public string tostring() "; }

// 省略getter 和 setter方法

}

​ 初始化時指定伺服器的權重

//初始化   模擬集群中提供服務的伺服器

static

​ 根據權重值獲取服務

private static server doselectwithweight(listserverlist) 

}}

if(!issame)

}

測試結果如下

從測試結果圖中可以看到,權重大的獲取到的請求數多,相反權重小的獲取到的請求數越小。

負載均衡實現之隨機數

負載均衡 loadbalance 它的職責是將網路請求,或者其他形式的負載 均攤 到不同的機器上。避免集群中部分伺服器壓力過大,而另一些伺服器比較空閒的情況。通過負載均衡,可以讓每台伺服器獲取到適合自己處理能力的請求。常見的負載均衡的實現方法有多種,如隨機 輪詢 hash一致性等。本文使用隨機法實現...

負載均衡策略 1 隨機排程

負載均衡策略分為兩部分。首先是後端服務縱向拆分,其次是確定每個請求應該落在哪台後端機器。後端服務縱向拆分,舉幾個例子說明。比如後端是提供 css 和 js 的檔案快取伺服器,磁碟空間不是瓶頸,而每個機器的頻寬和連線數是瓶頸,這種情況可以每個機器上都部署乙份一樣的檔案集合,做全冗餘。再比如後盾是提供 ...

負載均衡策略(二 隨機策略)

隨機策略 從伺服器列表中隨機選擇乙個服務,然後該將請求 到隨機選擇的服務上。隨機策略思路如下 1.獲取註冊到註冊中心的總服務列表,服務狀態為up的服務列表 2.判斷總服務列表和服務狀態為up的服務列表是否為null或者數量為0,若是,則返回null 3.根據服務的總數量,或者隨機服務 4.若服務為n...