六種常見負載均衡算法
今天我們來聊聊常見的負載均衡算法。
負載均衡將網(wǎng)絡(luò)流量或一組任務(wù)以某種算法合理分配給各個處理節(jié)點,使得節(jié)點得到平等的使用,并及時可靠地返回結(jié)果給用戶。
負載均衡廣泛應(yīng)用于各種硬件軟件系統(tǒng)中,比如:
- 根據(jù) IP 地址進行網(wǎng)絡(luò)流量負載均衡。在服務(wù)進行維護時,可以方便將網(wǎng)絡(luò)流量切換到臨時節(jié)點或降級的服務(wù)上。
- 根據(jù) HTTP 頭信息或請求字段進行應(yīng)用程序負載均衡,用戶得到響應(yīng)的時間更短,并且可以提供分層服務(wù),也方便服務(wù)擴容時加入新的節(jié)點。
- CDN 根據(jù)流量的來源,將流量導入相鄰地區(qū)的服務(wù)器,以獲得更短的響應(yīng)時間和更高的可用性。
下圖顯示了 6 種常見算法。
一、態(tài)算法
1.循環(huán)(Round Robin)
客戶端請求按順序發(fā)送到不同的服務(wù)實例。通常要求服務(wù)是無狀態(tài)的。這種算法最簡單,但是也無法處理某個節(jié)點變慢或者客戶端操作有連續(xù)性的情況。
2.粘性循環(huán)(Sticky Round Robin)
這是對循環(huán)算法的一種改進。如果 Alice 的第一個請求發(fā)送到服務(wù) A,那么接下來的請求也會發(fā)送到服務(wù) A。這種負載均衡可以確保一個用戶的請求都發(fā)往同一個服務(wù)節(jié)點,適合客戶端操作有連續(xù)性的情況。有時候該服務(wù)節(jié)點上會保存該用戶的一些狀態(tài),避免去后端數(shù)據(jù)庫查詢。
3.加權(quán)循環(huán)(Weighted Round Robin)
管理員可以指定每個服務(wù)的權(quán)重。權(quán)重高的服務(wù)會比其他服務(wù)處理更多請求。
4.散列(IP/URL Hash)
該算法對傳入請求的 IP 或 URL 應(yīng)用哈希函數(shù)。根據(jù)哈希函數(shù)的結(jié)果將請求路由到相關(guān)服務(wù)。
二、動態(tài)算法
5.最少連接(Least Connections)
新請求會發(fā)送到并發(fā)連接最少的服務(wù)節(jié)點。
6.響應(yīng)時間最少(Least Time)
新請求會發(fā)送到響應(yīng)時間最快的服務(wù)節(jié)點。這樣,某個服務(wù)節(jié)點變慢就不會阻塞后續(xù)請求處理了。