計(jì)算機(jī)集群通過一組松散集成的計(jì)算機(jī)軟件和/或硬件連接起來高度緊密地協(xié)作完成計(jì)算工作。在某種意義上,他們可以被看作是一臺(tái)計(jì)算機(jī)。集群系統(tǒng)中的單個(gè)計(jì)算機(jī)通常稱為節(jié)點(diǎn),通常通過局域網(wǎng)連接,但也有其它的可能連接方式。集群計(jì)算機(jī)通常用來改進(jìn)單個(gè)計(jì)算機(jī)的計(jì)算速度和/或可靠性。一般情況下集群計(jì)算機(jī)比單個(gè)計(jì)算機(jī),比如工作站或超級(jí)計(jì)算機(jī)性能價(jià)格比要高得多。
比如單個(gè)重負(fù)載的運(yùn)算分擔(dān)到多臺(tái)節(jié)點(diǎn)設(shè)備上做并行處理,每個(gè)節(jié)點(diǎn)設(shè)備處理結(jié)束后,將結(jié)果匯總,返回給用戶,系統(tǒng)處理能力得到大幅度提高。一般分為幾種:
高可用性集群:一般是指當(dāng)集群中有某個(gè)節(jié)點(diǎn)失效的情況下,其上的任務(wù)會(huì)自動(dòng)轉(zhuǎn)移到其他正常的節(jié)點(diǎn)上。還指可以將集群中的某節(jié)點(diǎn)進(jìn)行離線維護(hù)再上線,該過程并不影響整個(gè)集群的運(yùn)行。
負(fù)載均衡集群:負(fù)載均衡集群運(yùn)行時(shí),一般通過一個(gè)或者多個(gè)前端負(fù)載均衡器,將工作負(fù)載分發(fā)到后端的一組服務(wù)器上,從而達(dá)到整個(gè)系統(tǒng)的高性能和高可用性。
高性能計(jì)算集群:高性能計(jì)算集群采用將計(jì)算任務(wù)分配到集群的不同計(jì)算節(jié)點(diǎn)而提高計(jì)算能力,因而主要應(yīng)用在科學(xué)計(jì)算領(lǐng)域。
分布式 集群:同一個(gè)業(yè)務(wù),部署在多個(gè)服務(wù)器上。分布式:一個(gè)業(yè)務(wù)分拆成多個(gè)子業(yè)務(wù),或者本身就是不同的業(yè)務(wù),部署在不同的服務(wù)器上。
簡(jiǎn)單說,分布式是以縮短單個(gè)任務(wù)的執(zhí)行時(shí)間來提升效率的,而集群則是通過提高單位時(shí)間內(nèi)執(zhí)行的任務(wù)數(shù)來提升效率。舉例:就比如新浪網(wǎng),訪問的人多了,他可以做一個(gè)群集,前面放一個(gè)均衡服務(wù)器,后面幾臺(tái)服務(wù)器完成同一業(yè)務(wù),如果有業(yè)務(wù)訪問的時(shí)候,響應(yīng)服務(wù)器看哪臺(tái)服務(wù)器的負(fù)載不是很重,就將給哪一臺(tái)去完成,并且一臺(tái)服務(wù)器垮了,其它的服務(wù)器可以頂上來。分布式的每一個(gè)節(jié)點(diǎn),都完成不同的業(yè)務(wù),一個(gè)節(jié)點(diǎn)垮了,那這個(gè)業(yè)務(wù)可能就失敗了。
隨著業(yè)務(wù)量的提高,現(xiàn)有網(wǎng)絡(luò)的各個(gè)核心部分訪問量和數(shù)據(jù)流量的快速增長(zhǎng),其處理能力和計(jì)算強(qiáng)度也相應(yīng)地增大,使得單一的服務(wù)器設(shè)備根本無(wú)法承擔(dān)。在此情況下,如果扔掉現(xiàn)有設(shè)備去做大量的硬件升級(jí),這樣將造成現(xiàn)有資源的浪費(fèi),而且如果再面臨下一次業(yè)務(wù)量的提升時(shí),這又將導(dǎo)致再一次硬件升級(jí)的高額成本投入,甚至性能再卓越的設(shè)備也不能滿足當(dāng)前業(yè)務(wù)量增長(zhǎng)的需求。
負(fù)載均衡技術(shù)通過設(shè)置虛擬服務(wù)器IP(VIP),將后端多臺(tái)真實(shí)服務(wù)器的應(yīng)用資源虛擬成一臺(tái)高性能的應(yīng)用服務(wù)器,通過負(fù)載均衡算法,將用戶的請(qǐng)求轉(zhuǎn)發(fā)給后臺(tái)內(nèi)網(wǎng)服務(wù)器,內(nèi)網(wǎng)服務(wù)器將請(qǐng)求的響應(yīng)返回給負(fù)載平衡器,負(fù)載平衡器再將響應(yīng)發(fā)送到用戶,這樣就向互聯(lián)網(wǎng)用戶隱藏了內(nèi)網(wǎng)結(jié)構(gòu),阻止了用戶直接訪問后臺(tái)(內(nèi)網(wǎng))服務(wù)器,使得服務(wù)器更加安全,可以阻止對(duì)核心網(wǎng)絡(luò)棧和運(yùn)行在其它端口服務(wù)的攻擊。并且負(fù)載均衡設(shè)備(軟件或硬件)會(huì)持續(xù)的對(duì)服務(wù)器上的應(yīng)用狀態(tài)進(jìn)行檢查,并自動(dòng)對(duì)無(wú)效的應(yīng)用服務(wù)器進(jìn)行隔離,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單、擴(kuò)展性強(qiáng)、可靠性高的應(yīng)用解決方案,解決了單臺(tái)服務(wù)器處理性能不足,擴(kuò)展性不夠,可靠性較低的問題。
系統(tǒng)的擴(kuò)展可分為縱向(垂直)擴(kuò)展和橫向(水平)擴(kuò)展。縱向擴(kuò)展,是從單機(jī)的角度通過增加硬件處理能力,比如CPU處理能力,內(nèi)存容量,磁盤等方面,實(shí)現(xiàn)服務(wù)器處理能力的提升,不能滿足大型分布式系統(tǒng)(網(wǎng)站),大流量,高并發(fā),海量數(shù)據(jù)的問題。因此需要采用橫向擴(kuò)展的方式,通過添加機(jī)器來滿足大型網(wǎng)站服務(wù)的處理能力。比如:一臺(tái)機(jī)器不能滿足,則增加兩臺(tái)或者多臺(tái)機(jī)器,共同承擔(dān)訪問壓力。
負(fù)載平衡最重要的一個(gè)應(yīng)用是利用多臺(tái)服務(wù)器提供單一服務(wù),這種方案有時(shí)也稱之為服務(wù)器農(nóng)場(chǎng)。通常,負(fù)載平衡主要應(yīng)用于Web網(wǎng)站,大型的Internet Relay Chat網(wǎng)絡(luò),高流量的文件下載網(wǎng)站,NNTP(Network News Transfer Protocol)服務(wù)和DNS服務(wù)。現(xiàn)在負(fù)載平衡器也開始支持數(shù)據(jù)庫(kù)服務(wù),稱之為數(shù)據(jù)庫(kù)負(fù)載平衡器。
服務(wù)器負(fù)載均衡有三大基本Feature:負(fù)載均衡算法,健康檢查和會(huì)話保持,這三個(gè)Feature是保證負(fù)載均衡正常工作的基本要素。其他一些功能都是在這三個(gè)功能之上的一些深化。下面我們具體介紹一下各個(gè)功能的作用和原理。
在沒有部署負(fù)載均衡設(shè)備之前,用戶直接訪問服務(wù)器地址(中間或許有在防火墻上將服務(wù)器地址映射成別的地址,但本質(zhì)上還是一對(duì)一的訪問)。當(dāng)單臺(tái)服務(wù)器由于性能不足無(wú)法處理眾多用戶的訪問時(shí),就要考慮用多臺(tái)服務(wù)器來提供服務(wù),實(shí)現(xiàn)的方式就是負(fù)載均衡。負(fù)載均衡設(shè)備的實(shí)現(xiàn)原理是把多臺(tái)服務(wù)器的地址映射成一個(gè)對(duì)外的服務(wù)IP(我們通常稱之為VIP,關(guān)于服務(wù)器的映射可以直接將服務(wù)器IP映射成VIP地址,也可以將服務(wù)器IP:Port映射成VIP:Port,不同的映射方式會(huì)采取相應(yīng)的健康檢查,在端口映射時(shí),服務(wù)器端口與VIP端口可以不相同),這個(gè)過程對(duì)用戶端是不可見的,用戶實(shí)際上不知道服務(wù)器是做了負(fù)載均衡的,因?yàn)樗麄冊(cè)L問的還是一個(gè)目的IP,那么用戶的訪問到達(dá)負(fù)載均衡設(shè)備后,如何把用戶的訪問分發(fā)到合適的服務(wù)器就是負(fù)載均衡設(shè)備要做的工作了,具體來說用到的就是上述的三大Feature。
我們來做一個(gè)詳細(xì)的訪問流程分析:
用戶(IP:207.17.117.20)訪問域名www.a10networks.com,首先會(huì)通過DNS查詢解析出這個(gè)域名的公網(wǎng)地址:199.237.202.124,接下來用戶207.17.117.20會(huì)訪問199.237.202.124這個(gè)地址,因此數(shù)據(jù)包會(huì)到達(dá)負(fù)載均衡設(shè)備,接下來負(fù)載均衡設(shè)備會(huì)把數(shù)據(jù)包分發(fā)到合適的服務(wù)器,看下圖:
負(fù)載均衡設(shè)備在將數(shù)據(jù)包發(fā)給服務(wù)器時(shí),數(shù)據(jù)包是做了一些變化的,如上圖所示,數(shù)據(jù)包到達(dá)負(fù)載均衡設(shè)備之前,源地址是:207.17.117.20,目的地址是:199.237.202.124,當(dāng)負(fù)載均衡設(shè)備將數(shù)據(jù)包轉(zhuǎn)發(fā)給選中的服務(wù)器時(shí),源地址還是:207.17.117.20,目的地址變?yōu)?72.16.20.1,我們稱這種方式為目的地址NAT(DNAT,目的地址轉(zhuǎn)換)。一般來說,在服務(wù)器負(fù)載均衡中DNAT是一定要做的(還有另一種模式叫做服務(wù)器直接返回-DSR,是不做DNAT的,我們將另行討論),而源地址根據(jù)部署模式的不同,有時(shí)候也需要轉(zhuǎn)換成別的地址,我們稱之為:源地址NAT(SNAT),一般來說,旁路模式需要做SNAT,而串接模式不需要,本示意圖為串接模式,所以源地址沒做NAT。
我們?cè)倏捶?wù)器的返回包,如下圖所示,也經(jīng)過了IP地址的轉(zhuǎn)換過程,不過應(yīng)答包中源/目的地址與請(qǐng)求包正好對(duì)調(diào),從服務(wù)器回來的包源地址為172.16.20.1,目的地址為207.17.117.20,到達(dá)負(fù)載均衡設(shè)備后,負(fù)載均衡設(shè)備將源地址改為199.237.202.124,然后轉(zhuǎn)發(fā)給用戶,保證了訪問的一致性。
一般來說負(fù)載均衡設(shè)備都會(huì)默認(rèn)支持多種負(fù)載均衡分發(fā)策略,例如:
輪詢(RoundRobin)將請(qǐng)求順序循環(huán)地發(fā)到每個(gè)服務(wù)器。當(dāng)其中某個(gè)服務(wù)器發(fā)生故障,AX就把其從順序循環(huán)隊(duì)列中拿出,不參加下一次的輪詢,直到其恢復(fù)正常。
比率(Ratio):給每個(gè)服務(wù)器分配一個(gè)加權(quán)值為比例,根椐這個(gè)比例,把用戶的請(qǐng)求分配到每個(gè)服務(wù)器。當(dāng)其中某個(gè)服務(wù)器發(fā)生故障,AX就把其從服務(wù)器隊(duì)列中拿出,不參加下一次的用戶請(qǐng)求的分配,直到其恢復(fù)正常。
優(yōu)先權(quán)(Priority):給所有服務(wù)器分組,給每個(gè)組定義優(yōu)先權(quán),將用戶的請(qǐng)求分配給優(yōu)先級(jí)最高的服務(wù)器組(在同一組內(nèi),采用預(yù)先設(shè)定的輪詢或比率算法,分配用戶的請(qǐng)求);當(dāng)最高優(yōu)先級(jí)中所有服務(wù)器或者指定數(shù)量的服務(wù)器出現(xiàn)故障,AX將把請(qǐng)求送給次優(yōu)先級(jí)的服務(wù)器組。這種方式,實(shí)際為用戶提供一種熱備份的方式。
最少連接數(shù)(LeastConnection):AX會(huì)記錄當(dāng)前每臺(tái)服務(wù)器或者服務(wù)端口上的連接數(shù),新的連接將傳遞給連接數(shù)最少的服務(wù)器。當(dāng)其中某個(gè)服務(wù)器發(fā)生故障,AX就把其從服務(wù)器隊(duì)列中拿出,不參加下一次的用戶請(qǐng)求的分配,直到其恢復(fù)正常。
最快響應(yīng)時(shí)間(Fast Reponse time):新的連接傳遞給那些響應(yīng)最快的服務(wù)器。當(dāng)其中某個(gè)服務(wù)器發(fā)生故障,AX就把其從服務(wù)器隊(duì)列中拿出,不參加下一次的用戶請(qǐng)求的分配,直到其恢復(fù)正常。
哈希算法( hash): 將客戶端的源地址,端口進(jìn)行哈希運(yùn)算,根據(jù)運(yùn)算的結(jié)果轉(zhuǎn)發(fā)給一臺(tái)服務(wù)器進(jìn)行處理,當(dāng)其中某個(gè)服務(wù)器發(fā)生故障,就把其從服務(wù)器隊(duì)列中拿出,不參加下一次的用戶請(qǐng)求的分配,直到其恢復(fù)正常。
基于數(shù)據(jù)包的內(nèi)容分發(fā):例如判斷HTTP的URL,如果URL中帶有.jpg的擴(kuò)展名,就把數(shù)據(jù)包轉(zhuǎn)發(fā)到指定的服務(wù)器。
健康檢查健康檢查用于檢查服務(wù)器開放的各種服務(wù)的可用狀態(tài)。負(fù)載均衡設(shè)備一般會(huì)配置各種健康檢查方法,例如Ping,TCP,UDP,HTTP,F(xiàn)TP,DNS等。Ping屬于第三層的健康檢查,用于檢查服務(wù)器IP的連通性,而TCP/UDP屬于第四層的健康檢查,用于檢查服務(wù)端口的UP/DOWN,如果要檢查的更準(zhǔn)確,就要用到基于7層的健康檢查,例如創(chuàng)建一個(gè)HTTP健康檢查,Get一個(gè)頁(yè)面回來,并且檢查頁(yè)面內(nèi)容是否包含一個(gè)指定的字符串,如果包含,則服務(wù)是UP的,如果不包含或者取不回頁(yè)面,就認(rèn)為該服務(wù)器的Web服務(wù)是不可用(DOWN)的。比如,負(fù)載均衡設(shè)備檢查到172.16.20.3這臺(tái)服務(wù)器的80端口是DOWN的,負(fù)載均衡設(shè)備將不把后面的連接轉(zhuǎn)發(fā)到這臺(tái)服務(wù)器,而是根據(jù)算法將數(shù)據(jù)包轉(zhuǎn)發(fā)到別的服務(wù)器。創(chuàng)建健康檢查時(shí)可以設(shè)定檢查的間隔時(shí)間和嘗試次數(shù),例如設(shè)定間隔時(shí)間為5秒,嘗試次數(shù)為3,那么負(fù)載均衡設(shè)備每隔5秒發(fā)起一次健康檢查,如果檢查失敗,則嘗試3次,如果3次都檢查失敗,則把該服務(wù)標(biāo)記為DOWN,然后服務(wù)器仍然會(huì)每隔5秒對(duì)DOWN的服務(wù)器進(jìn)行檢查,當(dāng)某個(gè)時(shí)刻發(fā)現(xiàn)該服務(wù)器健康檢查又成功了,則把該服務(wù)器重新標(biāo)記為UP。健康檢查的間隔時(shí)間和嘗試次數(shù)要根據(jù)綜合情況來設(shè)置,原則是既不會(huì)對(duì)業(yè)務(wù)產(chǎn)生影響,又不會(huì)對(duì)負(fù)載均衡設(shè)備造成較大負(fù)擔(dān)。
會(huì)話保持 如何保證一個(gè)用戶的兩次http請(qǐng)求轉(zhuǎn)發(fā)到同一個(gè)服務(wù)器,這就要求負(fù)載均衡設(shè)備配置會(huì)話保持。
會(huì)話保持用于保持會(huì)話的連續(xù)性和一致性,由于服務(wù)器之間很難做到實(shí)時(shí)同步用戶訪問信息,這就要求把用戶的前后訪問會(huì)話保持到一臺(tái)服務(wù)器上來處理。舉個(gè)例子,用戶訪問一個(gè)電子商務(wù)網(wǎng)站,如果用戶登錄時(shí)是由第一臺(tái)服務(wù)器來處理的,但用戶購(gòu)買商品的動(dòng)作卻由第二臺(tái)服務(wù)器來處理,第二臺(tái)服務(wù)器由于不知道用戶信息,所以本次購(gòu)買就不會(huì)成功。這種情況就需要會(huì)話保持,把用戶的操作都通過第一臺(tái)服務(wù)器來處理才能成功。當(dāng)然并不是所有的訪問都需要會(huì)話保持,例如服務(wù)器提供的是靜態(tài)頁(yè)面比如網(wǎng)站的新聞?lì)l道,各臺(tái)服務(wù)器都有相同的內(nèi)容,這種訪問就不需要會(huì)話保持。
絕大多數(shù)的負(fù)載均衡產(chǎn)品都支持兩類基本的會(huì)話保持方式:源/目的地址會(huì)話保持和cookie會(huì)話保持,另外像hash,URL Persist等也是比較常用的方式,但不是所有設(shè)備都支持。基于不同的應(yīng)用要配置不同的會(huì)話保持,否則會(huì)引起負(fù)載的不均衡甚至訪問異常。我們主要分析B/S結(jié)構(gòu)的會(huì)話保持。
基于B/S結(jié)構(gòu)的應(yīng)用:
對(duì)于普通B/S結(jié)構(gòu)的應(yīng)用內(nèi)容,例如網(wǎng)站的靜態(tài)頁(yè)面,可以不用配置任何的會(huì)話保持,但是對(duì)于一個(gè)基于B/S結(jié)構(gòu)尤其是中間件平臺(tái)的業(yè)務(wù)系統(tǒng)來說,必須配置會(huì)話保持,一般情況下,我們配置源地址會(huì)話保持可以滿足需求,但是考慮到客戶端可能有上述不利于源地址會(huì)話保持的環(huán)境,采用html' target='_blank'>Cookie會(huì)話保持是一個(gè)更好的方式。Cookie會(huì)話保持會(huì)把負(fù)載均衡設(shè)備選擇的Server信息保存在Cookie中發(fā)送到客戶端,客戶端持續(xù)訪問時(shí),會(huì)把該Cookie帶來,負(fù)載均衡器通過分析Cookie把會(huì)話保持到之前選定的服務(wù)器。Cookie分為文件Cookie和內(nèi)存cookie,文件cookie保存在客戶端計(jì)算機(jī)硬盤上,只要該cookie文件不過期,則無(wú)論是否重復(fù)關(guān)閉開放瀏覽器都能保持到同一臺(tái)服務(wù)器。內(nèi)存Cookie則是把Cookie信息保存在內(nèi)存中,Cookie的生存時(shí)間從打開瀏覽器訪問開始,關(guān)閉瀏覽器結(jié)束。由于現(xiàn)在的瀏覽器對(duì)Cookie都有一定默認(rèn)的安全設(shè)置,有些客戶端可能規(guī)定不準(zhǔn)使用文件Cookie,所以現(xiàn)在的應(yīng)用程序開發(fā)多使用內(nèi)存Cookie。
然而,內(nèi)存Cookie也不是萬(wàn)能的,比如瀏覽器為了安全可能會(huì)完全禁用Cookie,這樣Cookie會(huì)話保持就失去了作用。我們可以通過Session-id來實(shí)現(xiàn)會(huì)話保持,即將session-id作為url參數(shù)或者放在隱藏字段 input type= hidden 中,然后分析Session-id進(jìn)行分發(fā)。
另一種方案是:將每一會(huì)話信息保存到一個(gè)數(shù)據(jù)庫(kù)中。由于這個(gè)方案會(huì)增加數(shù)據(jù)庫(kù)的負(fù)載,所以這個(gè)方案對(duì)性能的提高并不好。數(shù)據(jù)庫(kù)最好是用來存儲(chǔ)會(huì)話時(shí)間比較長(zhǎng)的會(huì)話數(shù)據(jù)。為了避免數(shù)據(jù)庫(kù)出現(xiàn)單點(diǎn)故障,并且提高其擴(kuò)展性,數(shù)據(jù)庫(kù)通常會(huì)復(fù)制到多臺(tái)服務(wù)器上,通過負(fù)載均衡器來分發(fā)請(qǐng)求到數(shù)據(jù)庫(kù)服務(wù)器上。
基于源/目的地址會(huì)話保持其實(shí)不太好用,因?yàn)榭蛻艨赡苁峭ㄟ^DHCP,NAT或者Web代理來連接Internet的,其IP地址可能經(jīng)常變換,這使得這個(gè)方案的服務(wù)質(zhì)量無(wú)法保障。
NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換):當(dāng)在專用網(wǎng)內(nèi)部的一些主機(jī)本來已經(jīng)分配到了本地IP地址(即僅在本專用網(wǎng)內(nèi)使用的專用地址),但現(xiàn)在又想和因特網(wǎng)上的主機(jī)通信(并不需要加密)時(shí),可使用NAT方法。這種方法需要在專用網(wǎng)連接到因特網(wǎng)的路由器上安裝NAT軟件。裝有NAT軟件的路由器叫做NAT路由器,它至少有一個(gè)有效的外部全球IP地址。這樣,所有使用本地地址的主機(jī)在和外界通信時(shí),都要在NAT路由器上將其本地地址轉(zhuǎn)換成全球IP地址,才能和因特網(wǎng)連接。
高擴(kuò)展性
通過添加或減少服務(wù)器數(shù)量,可以更好的應(yīng)對(duì)高并發(fā)請(qǐng)求。
(服務(wù)器)健康檢查
負(fù)載均衡器可以檢查后臺(tái)服務(wù)器應(yīng)用層的健康狀況并從服務(wù)器池中移除那些出現(xiàn)故障的服務(wù)器,提高可靠性。
TCP 連接復(fù)用(TCP Connection Reuse)
TCP連接復(fù)用技術(shù)通過將前端多個(gè)客戶的HTTP請(qǐng)求復(fù)用到后端與服務(wù)器建立的一個(gè)TCP連接上。這種技術(shù)能夠大大減小服務(wù)器的性能負(fù)載,減少與服務(wù)器之間新建TCP連接所帶來的延時(shí),并最大限度的降低客戶端對(duì)后端服務(wù)器的并發(fā)連接數(shù)請(qǐng)求,減少服務(wù)器的資源占用。
一般情況下,客戶端在發(fā)送HTTP請(qǐng)求之前需要先與服務(wù)器進(jìn)行TCP三次握手,建立TCP連接,然后發(fā)送HTTP請(qǐng)求。服務(wù)器收到HTTP請(qǐng)求后進(jìn)行處理,并將處理的結(jié)果發(fā)送回客戶端,然后客戶端和服務(wù)器互相發(fā)送FIN并在收到FIN的ACK確認(rèn)后關(guān)閉連接。在這種方式下,一個(gè)簡(jiǎn)單的HTTP請(qǐng)求需要十幾個(gè)TCP數(shù)據(jù)包才能處理完成。
采用TCP連接復(fù)用技術(shù)后,客戶端(如:ClientA)與負(fù)載均衡設(shè)備之間進(jìn)行三次握手并發(fā)送HTTP請(qǐng)求。負(fù)載均衡設(shè)備收到請(qǐng)求后,會(huì)檢測(cè)服務(wù)器是否存在空閑的長(zhǎng)連接,如果不存在,服務(wù)器將建立一個(gè)新連接。當(dāng)HTTP請(qǐng)求響應(yīng)完成后,客戶端則與負(fù)載均衡設(shè)備協(xié)商關(guān)閉連接,而負(fù)載均衡則保持與服務(wù)器之間的這個(gè)連接。當(dāng)有其它客戶端(如:ClientB)需要發(fā)送HTTP請(qǐng)求時(shí),負(fù)載均衡設(shè)備會(huì)直接向與服務(wù)器之間保持的這個(gè)空閑連接發(fā)送HTTP請(qǐng)求,避免了由于新建TCP連接造成的延時(shí)和服務(wù)器資源耗費(fèi)。
在HTTP 1.1中,客戶端可以在一個(gè)TCP連接中發(fā)送多個(gè)HTTP請(qǐng)求,這種技術(shù)叫做HTTP復(fù)用(HTTP Multiplexing)。它與TCP連接復(fù)用最根本的區(qū)別在于,TCP連接復(fù)用是將多個(gè)客戶端的HTTP請(qǐng)求復(fù)用到一個(gè)服務(wù)器端TCP連接上,而HTTP復(fù)用則是一個(gè)客戶端的多個(gè)HTTP請(qǐng)求通過一個(gè)TCP連接進(jìn)行處理。前者是負(fù)載均衡設(shè)備的獨(dú)特功能;而后者是HTTP 1.1協(xié)議所支持的新功能,目前被大多數(shù)瀏覽器所支持。
HTTP緩存
負(fù)載均衡器可以存儲(chǔ)靜態(tài)內(nèi)容,當(dāng)用戶請(qǐng)求它們時(shí)可以直接響應(yīng)用戶而不必再向后臺(tái)服務(wù)器請(qǐng)求。
TCP緩沖
TCP緩沖是為了解決后端服務(wù)器網(wǎng)速與客戶的前端網(wǎng)絡(luò)速度不匹配而造成的服務(wù)器資源浪費(fèi)的問題。客戶端與負(fù)載均衡之間采用的鏈路具有較高的時(shí)延和較低的帶寬,而負(fù)載均衡與服務(wù)器之間采用時(shí)延較低和高帶寬的局域網(wǎng)連接。由于負(fù)載均衡器可以暫存后臺(tái)服務(wù)器對(duì)客戶的響應(yīng)數(shù)據(jù),再將它們轉(zhuǎn)發(fā)給那些響應(yīng)時(shí)間較長(zhǎng)網(wǎng)速較慢的客戶,如此后臺(tái)Web服務(wù)器就可以釋放相應(yīng)的線程去處理其它任務(wù)。
SSL加速
一般情況下,HTTP采用明文的方式在網(wǎng)絡(luò)上傳輸,有可能被非法竊聽,尤其是用于認(rèn)證的口令信息等。為了避免出現(xiàn)這樣的安全問題,一般采用SSL協(xié)議(即:HTTPS)對(duì)HTTP協(xié)議進(jìn)行加密,以保證整個(gè)傳輸過程的安全性。在SSL通信中,首先采用非對(duì)稱密鑰技術(shù)交換認(rèn)證信息,并交換服務(wù)器和瀏覽器之間用于加密數(shù)據(jù)的會(huì)話密鑰,然后利用該密鑰對(duì)通信過程中的信息進(jìn)行加密和解密。
SSL是需要耗費(fèi)大量CPU資源的一種安全技術(shù)。目前,大多數(shù)負(fù)載均衡設(shè)備均采用SSL加速芯片(硬件負(fù)載均衡器)進(jìn)行SSL信息的處理。這種方式比傳統(tǒng)的采用服務(wù)器的SSL加密方式提供更高的SSL處理性能,從而節(jié)省大量的服務(wù)器資源,使服務(wù)器能夠?qū)W⒂跇I(yè)務(wù)請(qǐng)求的處理。另外,采用集中的SSL處理,還能夠簡(jiǎn)化對(duì)證書的管理,減少日常管理的工作量。
內(nèi)容過濾
有些負(fù)載均衡器可以按要求修改通過它的數(shù)據(jù)。
入侵阻止功能
在防火墻保障網(wǎng)絡(luò)層/傳輸層安全的基礎(chǔ)上,提供應(yīng)用層安全防范。
分類下面從不同層次討論負(fù)載均衡的實(shí)現(xiàn):
DNS 負(fù)載均衡
DNS負(fù)責(zé)提供域名解析服務(wù),當(dāng)訪問某個(gè)站點(diǎn)時(shí),實(shí)際上首先需要通過該站點(diǎn)域名的DNS服務(wù)器來獲取域名指向的IP地址,在這一過程中,DNS服務(wù)器完成了域名到IP地址的映射,同樣,這樣映射也可以是一對(duì)多的,這時(shí)候,DNS服務(wù)器便充當(dāng)了負(fù)載均衡調(diào)度器,將用戶的請(qǐng)求分散到多臺(tái)服務(wù)器上。使用dig命令來看下”baidu”的DNS設(shè)置:
可見baidu擁有三個(gè)A記錄。
這種技術(shù)的優(yōu)點(diǎn)是,實(shí)現(xiàn)簡(jiǎn)單、實(shí)施容易、成本低、適用于大多數(shù)TCP/IP應(yīng)用,并且DNS服務(wù)器可以在所有可用的A記錄中尋找離用戶最近的一臺(tái)服務(wù)器。但是,其缺點(diǎn)也非常明顯,首先這種方案不是真正意義上的負(fù)載均衡,DNS服務(wù)器將Http請(qǐng)求平均地分配到后臺(tái)的Web服務(wù)器上(或者根據(jù)地理位置),而不考慮每個(gè)Web服務(wù)器當(dāng)前的負(fù)載情況;如果后臺(tái)的Web服務(wù)器的配置和處理能力不同,最慢的Web服務(wù)器將成為系統(tǒng)的瓶頸,處理能力強(qiáng)的服務(wù)器不能充分發(fā)揮作用;其次未考慮容錯(cuò),如果后臺(tái)的某臺(tái)Web服務(wù)器出現(xiàn)故障,DNS服務(wù)器仍然會(huì)把DNS請(qǐng)求分配到這臺(tái)故障服務(wù)器上,導(dǎo)致不能響應(yīng)客戶端。最后一點(diǎn)是致命的,有可能造成相當(dāng)一部分客戶不能享受Web服務(wù),并且由于DNS緩存的原因,所造成的后果要持續(xù)相當(dāng)長(zhǎng)一段時(shí)間(一般DNS的刷新周期約為24小時(shí))。所以在國(guó)外最新的建設(shè)中心Web站點(diǎn)方案中,已經(jīng)很少采用這種方案了。
鏈路層(OSI 第二層)負(fù)載均衡
在通信協(xié)議的數(shù)據(jù)鏈路層修改mac地址,進(jìn)行負(fù)載均衡。
數(shù)據(jù)分發(fā)時(shí),不修改ip地址(因?yàn)檫€看不到ip地址),只修改目標(biāo)mac地址,并且配置所有后端服務(wù)器虛擬ip和負(fù)載均衡器ip地址一致,達(dá)到不修改數(shù)據(jù)包的源地址和目標(biāo)地址,進(jìn)行數(shù)據(jù)分發(fā)的目的。
實(shí)際處理服務(wù)器ip和數(shù)據(jù)請(qǐng)求目的ip一致,不需要經(jīng)過負(fù)載均衡服務(wù)器進(jìn)行地址轉(zhuǎn)換,可將響應(yīng)數(shù)據(jù)包直接返回給用戶瀏覽器,避免負(fù)載均衡服務(wù)器網(wǎng)卡帶寬成為瓶頸。也稱為直接路由模式(DR模式)。如下圖:
性能很好,但是配置復(fù)雜,目前應(yīng)用比較廣泛。
傳輸層(OSI 第四層)負(fù)載均衡
傳輸層是 OSI 第四層,包括 TCP 和 UDP。流行的傳輸層負(fù)載均衡器有 HAProxy(這個(gè)也用于應(yīng)用層負(fù)載均衡)和 IPVS。
主要通過報(bào)文中的目標(biāo)地址和端口,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
以常見的TCP為例,負(fù)載均衡設(shè)備在接收到第一個(gè)來自客戶端的SYN 請(qǐng)求時(shí),即通過上述方式選擇一個(gè)最佳的服務(wù)器,并對(duì)報(bào)文中目標(biāo)IP地址進(jìn)行修改(改為后端服務(wù)器IP),直接轉(zhuǎn)發(fā)給該服務(wù)器。TCP的連接建立,即三次握手是客戶端和服務(wù)器直接建立的,負(fù)載均衡設(shè)備只是起到一個(gè)類似路由器的轉(zhuǎn)發(fā)動(dòng)作。在某些部署情況下,為保證服務(wù)器回包可以正確返回給負(fù)載均衡設(shè)備,在轉(zhuǎn)發(fā)報(bào)文的同時(shí)可能還會(huì)對(duì)報(bào)文原來的源地址進(jìn)行修改。
應(yīng)用層(OSI 第七層)負(fù)載均衡
應(yīng)用層是 OSI 第七層。它包括 HTTP、HTTPS 和 WebSockets。一款非常流行又久經(jīng)考驗(yàn)的應(yīng)用層負(fù)載均衡器就是 Nginx[恩靜埃克斯 = Engine X]。
所謂七層負(fù)載均衡,也稱為“內(nèi)容交換”,也就是主要通過報(bào)文中的真正有意義的應(yīng)用層內(nèi)容,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。注意此時(shí)可以看到具體的http請(qǐng)求的完整url,因此可以實(shí)現(xiàn)下圖所示的分發(fā):
以常見的TCP為例,負(fù)載均衡設(shè)備如果要根據(jù)真正的應(yīng)用層內(nèi)容再選擇服務(wù)器,只能先代理最終的服務(wù)器和客戶端建立連接(三次握手)后,才能看到客戶端發(fā)送的真正應(yīng)用層內(nèi)容的報(bào)文,然后再根據(jù)該報(bào)文中的特定字段,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。負(fù)載均衡設(shè)備在這種情況下,更類似于一個(gè)代理服務(wù)器。負(fù)載均衡和前端的客戶端以及后端的服務(wù)器會(huì)分別建立TCP連接。所以從這個(gè)技術(shù)原理上來看,七層負(fù)載均衡明顯的對(duì)負(fù)載均衡設(shè)備的要求更高,處理七層的能力也必然會(huì)低于四層模式的部署方式。那么,為什么還需要七層負(fù)載均衡呢?
七層負(fù)載均衡的好處,是使得整個(gè)網(wǎng)絡(luò)更 智能化 ,比如上面列舉的負(fù)載均衡的好處,大部分都基于七層負(fù)載均衡。例如訪問一個(gè)網(wǎng)站的用戶流量,可以通過七層的方式,將對(duì)圖片類的請(qǐng)求轉(zhuǎn)發(fā)到特定的圖片服務(wù)器并可以使用緩存技術(shù);將對(duì)文字類的請(qǐng)求可以轉(zhuǎn)發(fā)到特定的文字服務(wù)器并可以使用壓縮技術(shù)。當(dāng)然這只是七層應(yīng)用的一個(gè)小案例,從技術(shù)原理上,這種方式可以對(duì)客戶端的請(qǐng)求和服務(wù)器的響應(yīng)進(jìn)行任意意義上的修改,極大的提升了應(yīng)用系統(tǒng)在網(wǎng)絡(luò)層的靈活性。
另外一個(gè)常常被提到功能就是安全性。網(wǎng)絡(luò)中最常見的SYN Flood攻擊,即黑客控制眾多源客戶端,使用虛假IP地址對(duì)同一目標(biāo)發(fā)送SYN攻擊,通常這種攻擊會(huì)大量發(fā)送SYN報(bào)文,耗盡服務(wù)器上的相關(guān)資源,以達(dá)到Denial of Service(DoS)的目的。從技術(shù)原理上也可以看出,四層模式下這些SYN攻擊都會(huì)被轉(zhuǎn)發(fā)到后端的服務(wù)器上;而七層模式下這些SYN攻擊自然在負(fù)載均衡設(shè)備上就截止,不會(huì)影響后臺(tái)服務(wù)器的正常運(yùn)營(yíng)。另外負(fù)載均衡設(shè)備可以在七層層面設(shè)定多種策略,過濾特定報(bào)文,例如SQL Injection等應(yīng)用層面的特定攻擊手段,從應(yīng)用層面進(jìn)一步提高系統(tǒng)整體安全。
現(xiàn)在的七層負(fù)載均衡,主要還是著重于應(yīng)用廣泛的HTTP協(xié)議,所以其應(yīng)用范圍主要是眾多的網(wǎng)站或者內(nèi)部信息平臺(tái)等基于B/S開發(fā)的系統(tǒng)。 四層負(fù)載均衡則對(duì)應(yīng)其他TCP應(yīng)用,例如基于C/S開發(fā)的ERP等系統(tǒng)。
相關(guān)推薦:
總結(jié)關(guān)于分布式集群注意點(diǎn)
以上就是關(guān)于集群、分布式和負(fù)載均衡的區(qū)別有哪些?(圖文)的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選