負(fù)載均衡算法大全
負(fù)載均衡的發(fā)展基礎(chǔ)就是負(fù)載均衡算法。那么針對不同的服務(wù)器我們也會采用不同的負(fù)載均衡算法,因?yàn)樗麄兯邆涞暮鸵蟮墓δ芨鞑幌嗤?。那么我們現(xiàn)在就來詳細(xì)了解一下這方面的知識。希望能讓大家從中得到需要的東西。
服務(wù)器負(fù)載均衡算法有很多(持續(xù)性的和非持續(xù)性的),包括輪循算法、最少連接算法、響應(yīng)時間算法、散列算法、最少連接失誤算法,鏈路帶寬算法等等。
此外實(shí)際服務(wù)器(RealServer)可以被分配不同的加權(quán)值來調(diào)整被分配的流量。比如性能高的大型服務(wù)器可配置較大的加權(quán)值,而為性能較低的小型服務(wù)器設(shè)置較小的加權(quán)值。為了避免服務(wù)器因過載而崩潰,可為實(shí)際服務(wù)器指定***連接閾值來避免該服務(wù)器過載。任何服務(wù)器可被指定為另一臺服務(wù)器的備份服務(wù)器或溢出服務(wù)器,從而進(jìn)一步保證了應(yīng)用可用性。
非持續(xù)性算法(Non-Persistent):
一個客戶端的不同的請求可能被分配到一個實(shí)際服務(wù)組中的不同的實(shí)服務(wù)器上進(jìn)行處理。
主要有輪循算法、最少連接算法、響應(yīng)速度算法等。
輪循算法(RoundRobin):
說明:每一次來自網(wǎng)絡(luò)的請求輪流分配給內(nèi)部中的每臺服務(wù)器,從1至N然后重新開始。
舉例:此種負(fù)載均衡算法適合于服務(wù)器組中的所有服務(wù)器都有相同的軟硬件配置并且平均服務(wù)請求相對均衡的情況;
最少連接算法(LeastConnection):
說明:客戶端的每一次請求服務(wù)在服務(wù)器停留的時間都可能會有較大的差異,隨著工作時間的加長,如果采用簡單的輪循或隨機(jī)均衡算法,每一臺服務(wù)器上的連接進(jìn)程可能會產(chǎn)生極大的不同,這樣的結(jié)果并不會達(dá)到真正的負(fù)載均衡。最少連接數(shù)均衡算法對內(nèi)部中有負(fù)載的每一臺服務(wù)器都有一個數(shù)據(jù)記錄,記錄的內(nèi)容是當(dāng)前該服務(wù)器正在處理的連接數(shù)量,當(dāng)有新的服務(wù)連接請求時,將把當(dāng)前請求分配給連接數(shù)最少的服務(wù)器,使均衡更加符合實(shí)際情況,負(fù)載更加均衡。
舉例:此種負(fù)載均衡算法適合長時間處理的請求服務(wù)。
響應(yīng)速度算法(ResponseTime):
說明:負(fù)載均衡設(shè)備對內(nèi)部各服務(wù)器發(fā)出一個探測請求(例如Ping),然后根據(jù)內(nèi)部中各服務(wù)器對探測請求的最快響應(yīng)時間來決定哪一臺服務(wù)器來響應(yīng)客戶端的服務(wù)請求。
舉例:此種負(fù)載均衡算法能較好地反映服務(wù)器的當(dāng)前運(yùn)行狀態(tài),但最快響應(yīng)時間僅僅指的是負(fù)載均衡設(shè)備與服務(wù)器間的最快響應(yīng)時間,而不是客戶端與服務(wù)器間的最快響應(yīng)時間。
持續(xù)性算法(Persistent):
從一個特定的客戶端發(fā)出的請求都被分配到一個實(shí)服務(wù)組中的同一個實(shí)服務(wù)器上進(jìn)行處理。
主要包括的負(fù)載均衡算法有:
A.基于IP的算法
Persistent IP(pi):基于用戶IP地址來選擇服務(wù)器。
Hash IP(hi):基于用戶IP地址的HASH值,來選擇服務(wù)器
Consistent Hash IP(chi):基于列表IP來選擇服務(wù)器
B.基于報(bào)頭/請求的算法
HashHeader(hh):基于用戶請求報(bào)中HTTP報(bào)頭來選擇服務(wù)器;
PersistentHostname(ph):基于用戶請求報(bào)中HTTP報(bào)頭的Hostname的HASH值,來選擇服務(wù)器;
PersistentURL(pu):基于對URITag和值的靜態(tài)對應(yīng)關(guān)系來選擇服務(wù)器。
SSLSessionID(sslsid):基于SSL會話ID來選擇服務(wù)器。
C.基于Cookie的負(fù)載均衡算法
PersistentCookie(pc):選擇服務(wù)器基于用戶請求包用CookieName/Value的靜態(tài)對應(yīng)關(guān)系;
HashCookie(hc):選擇服務(wù)器基于用戶請求包用CookieName/Value的Hash值對應(yīng)關(guān)系;
InsertCookie(ic):選擇服務(wù)器基于負(fù)載均衡器向服務(wù)器響應(yīng)包中插入Cookie;
Re-writeCookie(rc):選擇服務(wù)器基于負(fù)載均衡器向服務(wù)器響應(yīng)包中重寫Cookie值。(必須為重寫指定Cookie值的偏移量)