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