負(fù)載均衡是為了解決單一主機(jī)無(wú)法滿足較大訪問(wèn)量的負(fù)載問(wèn)題。將巨大的訪問(wèn)請(qǐng)求負(fù)載到不同的主機(jī)上面,以便使請(qǐng)求訪問(wèn)的響應(yīng)速度不受主機(jī)效率的影響。
每一個(gè)主機(jī)運(yùn)行一個(gè)所需服務(wù)器程序的獨(dú)立備份,例如Web服務(wù)器、FTP服務(wù)器、E-mail服務(wù)器等。對(duì)于這些服務(wù)器來(lái)說(shuō),可以將服務(wù)器運(yùn)行在集群內(nèi)的多個(gè)主機(jī)上,網(wǎng)絡(luò)負(fù)載均衡措施將訪問(wèn)請(qǐng)求或者其他工作負(fù)載在這些主機(jī)進(jìn)行分配。
由于網(wǎng)絡(luò)的數(shù)據(jù)流量多集中在某臺(tái)中心服務(wù)器上,所以現(xiàn)在所說(shuō)的負(fù)載均衡多指的是對(duì)訪問(wèn)服務(wù)器的負(fù)載進(jìn)行均衡或分擔(dān)。負(fù)載均衡從結(jié)構(gòu)上分為本地發(fā)在均衡和地域負(fù)載均衡。本地負(fù)載均衡是指本地的服務(wù)器集群做負(fù)載均衡,地域負(fù)載均衡是指分別放置在不同的地理位置、網(wǎng)絡(luò)及服務(wù)器群集之間負(fù)載均衡。
1.利用HTTP重定向完成負(fù)載均衡
HTTP重定向負(fù)載均衡有一臺(tái)重定向服務(wù)器,它也是一臺(tái)普通的服務(wù)器,其唯一的功能就是根據(jù)用戶的HTTP請(qǐng)求計(jì)算一臺(tái)應(yīng)用集群中服務(wù)器的地址,并將此地址寫入HTTP重定向響應(yīng)中返回給用戶。
這種方案實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單,但是需要瀏覽器請(qǐng)求兩次服務(wù)器才能完成。并且重定向服務(wù)器很容易編程瓶頸,因?yàn)橐淮沃囟ㄏ蚍祷氐倪^(guò)程,也是一次標(biāo)準(zhǔn)HTTP請(qǐng)求,如果集群內(nèi)有10臺(tái)機(jī)器,那HTTP重定向服務(wù)器的流量將是應(yīng)用服務(wù)器的10倍,如果有100臺(tái)估計(jì)就要宕機(jī)了,所以伸縮性能受到了很大的限制。還有使用302響應(yīng)碼重定向,不利于網(wǎng)站的SEO。
2.利用DNS協(xié)議來(lái)完成負(fù)載均衡
最早的負(fù)載均衡技術(shù)是通過(guò)DNS來(lái)實(shí)現(xiàn)的,在DNS中為多個(gè)地址配置同一個(gè)名字,因而查詢這個(gè)名字的客戶機(jī)將得到其中一個(gè)地址,從而使的不同的客戶訪問(wèn)不同的服務(wù)器,達(dá)到負(fù)載負(fù)載均衡的目的。
簡(jiǎn)單的說(shuō),比如訪問(wèn)某一個(gè)域名時(shí),先由DNS來(lái)判斷各個(gè)主機(jī)的負(fù)載情況,把這個(gè)請(qǐng)求負(fù)載最少的那臺(tái)主機(jī)的ip地址。
DNS負(fù)載均衡是一種簡(jiǎn)單有效的方法,但是他不能區(qū)分服務(wù)器的差異,也不能反映服務(wù)器的當(dāng)前運(yùn)行狀態(tài)。當(dāng)使用DNS負(fù)載均衡的時(shí)候,必須盡量保證不同的客戶計(jì)算機(jī)能軍均勻獲得不同的地址。由于DNS數(shù)據(jù)具備刷新時(shí)間標(biāo)志,一旦超過(guò)這個(gè)時(shí)間限制,其他DNS服務(wù)器及就需要和這個(gè)服務(wù)器交互,以重新獲得地址數(shù)據(jù),就有可能獲得不同的IP地址。
因此,為了使地址能隨機(jī)分配,就應(yīng)使刷新時(shí)間盡量短,不同的地方的DNS服務(wù)器能更新對(duì)應(yīng)的地址,達(dá)到隨機(jī)獲得地址,然而將DNS有效期時(shí)間設(shè)置的過(guò)短,將使DNS流量大增,而造成額外的網(wǎng)絡(luò)問(wèn)題。DNS負(fù)載均衡的另一個(gè)問(wèn)題是,一旦某個(gè)服務(wù)器出現(xiàn)故障,即使及時(shí)修改了DNS設(shè)置,還是要等待足夠的時(shí)間(刷新時(shí)間)才能發(fā)揮時(shí)間,再次期間,保存了故障服務(wù)器地址的客戶計(jì)算機(jī)將不能正常訪問(wèn)服務(wù)器。
盡管存在多種問(wèn)題,但它是一種非常有效的做法。
3.利用代理服務(wù)器完成負(fù)載均衡
使用代理服務(wù)器可以請(qǐng)求發(fā)給你內(nèi)部的服務(wù)器,使用這種加速器模式顯然可以提升靜態(tài)頁(yè)面的訪問(wèn)速度。然而也可以考慮這樣一種技術(shù),使用代理服務(wù)器將請(qǐng)求均勻地轉(zhuǎn)發(fā)給多臺(tái)服務(wù)器,從而達(dá)到負(fù)載均衡的目的。
這種代理方式與普通的代理方式有所不同,標(biāo)準(zhǔn)代理方式是客戶使用代理訪問(wèn)多個(gè)外部服務(wù)器,而這種代理方式是代理多個(gè)客戶訪問(wèn)內(nèi)部服務(wù)器,因此也被稱為反向代理模式。雖然實(shí)現(xiàn)這個(gè)任務(wù)并不是特別復(fù)雜,然而由于要求特別高的效率,實(shí)現(xiàn)起來(lái)并不簡(jiǎn)單。
使用反向代理的好處是:可以將負(fù)載均衡和代理服務(wù)器的高速緩存技術(shù)結(jié)合在一起,提供有益的性能。然而它本身也存在一些問(wèn)題,首先就是必須為每一種服務(wù)都專門開(kāi)發(fā)一個(gè)反向代理服務(wù)器,這就不是一個(gè)輕松的任務(wù)了。
代理服務(wù)器本身雖然可以達(dá)到很高的效率,但是針對(duì)每一次代理,代理服務(wù)器就必須維護(hù)兩個(gè)連接,一個(gè)對(duì)外的連接,一個(gè)對(duì)內(nèi)的連接。因此對(duì)于特別高的連接請(qǐng)求,代理服務(wù)器的負(fù)載也就非常之大。反向代理方式下能應(yīng)用優(yōu)化的負(fù)載均衡策略,每次訪問(wèn)最空閑的內(nèi)部服務(wù)器。但隨著并發(fā)連接數(shù)量的增加,代理服務(wù)器本身的負(fù)載也變得非常大,最后反向代理服務(wù)器本身成為服務(wù)的瓶頸。
4.利用網(wǎng)關(guān)的地址轉(zhuǎn)換功能
支持負(fù)載均衡的地址轉(zhuǎn)換網(wǎng)關(guān),可以將一個(gè)外部IP地址映射為多個(gè)內(nèi)部IP地址。對(duì)每次TCP連接請(qǐng)求動(dòng)態(tài)使用其中一個(gè)內(nèi)部地址,達(dá)到負(fù)載均衡的目的。很多硬件廠商將這種技術(shù)集成在他們的交換機(jī)中,作為他們第四層交換的一種功能來(lái)實(shí)現(xiàn),一般采用隨機(jī)選擇、根據(jù)服務(wù)器的連接數(shù)量或者響應(yīng)時(shí)間進(jìn)行選擇的負(fù)載均衡策略來(lái)分配負(fù)載。由于地址轉(zhuǎn)換相對(duì)來(lái)講比較接近網(wǎng)絡(luò)的底層,因此就有可能將它集成在硬件設(shè)備中,通常這樣的硬件設(shè)備是局域網(wǎng)交換機(jī)。
當(dāng)前局域網(wǎng)交換機(jī)所謂的第四層交換機(jī)技術(shù),就是按照IP地址和TCP端口進(jìn)行虛擬連接的交換,直接將數(shù)據(jù)包發(fā)送到目的計(jì)算機(jī)的相應(yīng)端口。通過(guò)交換機(jī)就能將來(lái)自外部的初始連接請(qǐng)求分別于內(nèi)部的多個(gè)地址相聯(lián)系。
由于第四代交換機(jī)基于硬件芯片,因此其性能非常優(yōu)秀,尤其是對(duì)于網(wǎng)絡(luò)傳輸速度和交換速度遠(yuǎn)遠(yuǎn)超過(guò)普通的數(shù)據(jù)包轉(zhuǎn)發(fā)。然而,正因?yàn)樗鞘褂糜布?shí)現(xiàn)的,所以也不夠靈活,僅僅能夠處理幾種最標(biāo)準(zhǔn)的應(yīng)用協(xié)議的負(fù)載均衡,如HTTP。當(dāng)前負(fù)載均衡主要解決服務(wù)器的處理能力不足的問(wèn)題,因此并不能充分發(fā)揮交換機(jī)帶來(lái)的高網(wǎng)絡(luò)帶寬的優(yōu)點(diǎn)。
5.數(shù)據(jù)鏈路層負(fù)載均衡
數(shù)據(jù)鏈路層主要處理 mac 地址,所以使用修改mac地址進(jìn)行轉(zhuǎn)發(fā)請(qǐng)求。負(fù)載均衡數(shù)據(jù)分發(fā)過(guò)程中不修改IP地址,只修改mac地址,通過(guò)配置真實(shí)物理服務(wù)器集群所有機(jī)器虛擬IP和負(fù)載均衡服務(wù)器IP地址一致,從而達(dá)到不修改數(shù)據(jù)包的源地址和目的地址就可以進(jìn)行數(shù)據(jù)分發(fā)的目的。由于web服務(wù)器的服務(wù)器地址IP和數(shù)據(jù)請(qǐng)求目的IP地址一致,不需要通過(guò)負(fù)載均衡服務(wù)器進(jìn)行地址轉(zhuǎn)換,可將相應(yīng)數(shù)據(jù)包直接返回用戶。如果有足夠的公有IP,其實(shí)web服務(wù)器也可以直接使用自己的IP響應(yīng)請(qǐng)求,不過(guò)這樣web服務(wù)器必須綁定負(fù)載均衡的虛擬IP地址(VIP),才能保證web服務(wù)器收到來(lái)自負(fù)載均衡發(fā)送的數(shù)據(jù)包。
這種方式稱作三角傳輸模式,單臂模式,也叫做直接路由方式(DR)。使用DR方式的鏈路層負(fù)載均衡是目前大型網(wǎng)站使用最廣的一種負(fù)載均衡手段。
現(xiàn)在使用的負(fù)載均衡無(wú)外乎這幾種方式,或者幾種方式的組合。我相信很多大廠能用這種模式解決高并發(fā)高性能的問(wèn)題,很多其他服務(wù)也是沒(méi)有問(wèn)題的。