負載均衡(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...