概述
文章負(fù)載均衡(Load Balancing)學(xué)習(xí)筆記(一) 講述了負(fù)載均衡的一般性原理,本文繼續(xù)介紹常見(jiàn)的實(shí)現(xiàn)負(fù)載均衡的方法。
HTTP重定向
HTTP重定向服務(wù)器是一臺(tái)普通的Web服務(wù)器,用戶的請(qǐng)求先到達(dá)重定向服務(wù)器,這臺(tái)服務(wù)器會(huì)挑選一臺(tái)后端服務(wù)器的地址(例如使用輪詢的方式),并將該地址寫(xiě)入HTTP重定向響應(yīng)結(jié)果中(以響應(yīng)狀態(tài)碼302返回)返回給用戶。用戶將根據(jù)這個(gè)新的地址重新發(fā)送請(qǐng)求到選中的服務(wù)器上。選中的服務(wù)器會(huì)處理用戶請(qǐng)求,并將結(jié)果返回給用戶。
HTTP重定向的處理流程如圖1所示。
圖1:HTTP重定向?qū)崿F(xiàn)負(fù)載均衡
通過(guò)重定向服務(wù)器的處理,用戶請(qǐng)求被分配到不同的后端服務(wù)器上進(jìn)行處理,實(shí)現(xiàn)了負(fù)載均衡的目的。
優(yōu)點(diǎn)
HTTP重定向負(fù)載均衡的方法實(shí)現(xiàn)上比較簡(jiǎn)單。
缺點(diǎn)
增加了用戶的時(shí)延,因?yàn)樵L問(wèn)請(qǐng)求需要進(jìn)行兩次往返
重定向服務(wù)器沒(méi)有將后端服務(wù)器的負(fù)載差異考慮進(jìn)去,有些后端服務(wù)器可能在相當(dāng)繁忙時(shí)仍然接收到較多的請(qǐng)求
重定向服務(wù)器的并發(fā)處理能力制約著整個(gè)系統(tǒng)的并發(fā)處理能力
如果重定向服務(wù)器出現(xiàn)故障,站點(diǎn)就會(huì)癱瘓
由于存在這些缺點(diǎn),HTTP重定向通常都會(huì)與其他一種或多種負(fù)載均衡技術(shù)結(jié)合使用。
DNS負(fù)載均衡
DNS負(fù)載均衡的實(shí)現(xiàn)原理是在DNS服務(wù)器中為同一個(gè)主機(jī)名配置多個(gè)IP地址,在應(yīng)答DNS查詢時(shí),DNS服務(wù)器對(duì)于每個(gè)查詢將以DNS記錄的IP地址按順序返回不同的解析結(jié)果,將客戶端的訪問(wèn)引導(dǎo)到不同的機(jī)器上去,使得不同客戶端訪問(wèn)不同的服務(wù)器,從而達(dá)到負(fù)載均衡的目的。
圖2:DNS實(shí)現(xiàn)負(fù)載均衡
優(yōu)點(diǎn)
由于DNS系統(tǒng)本身是一個(gè)分布式系統(tǒng),相對(duì)來(lái)說(shuō)它不存在性能和吞吐能力的限制,故使用DNS來(lái)做負(fù)載均衡并不需要擔(dān)心負(fù)載均衡服務(wù)器的處理能力
可以根據(jù)用戶IP進(jìn)行智能解析,DNS服務(wù)器可以在所有可用的A記錄中尋找離用戶最近的一臺(tái)服務(wù)器為用戶提供服務(wù)
缺點(diǎn)
DNS服務(wù)器并不知道后端服務(wù)器的情況,如果后端服務(wù)器宕機(jī),而用戶的請(qǐng)求繼續(xù)被分配到這個(gè)后端服務(wù)器,會(huì)導(dǎo)致無(wú)法響應(yīng)用戶的請(qǐng)求
DNS服務(wù)器依然沒(méi)有將后端服務(wù)器的負(fù)載差異考慮進(jìn)去
DNS服務(wù)器存在緩存,當(dāng)需要更新請(qǐng)求的分配時(shí),新增一個(gè)IP或者刪除一個(gè)IP并不能立即生效
反向代理
反向代理服務(wù)器的工作主要是轉(zhuǎn)發(fā)HTTP請(qǐng)求,因此它工作在HTTP層,也就是OSI七層結(jié)構(gòu)中的應(yīng)用層(第七層),所以基于反向代理的負(fù)載均衡也稱為七層負(fù)載均衡。利用反向代理服務(wù)器進(jìn)行負(fù)載均衡,如圖3所示。
圖3:反向代理實(shí)現(xiàn)負(fù)載均衡
反向代理服務(wù)處于后端服務(wù)器的前面,由于需要直接受用戶的請(qǐng)求,故反向代理服務(wù)器需要一個(gè)外網(wǎng)IP。而后端服務(wù)器并不直接對(duì)外提供訪問(wèn),因此后端服務(wù)器并不需要外網(wǎng)IP。反向代理服務(wù)器通過(guò)內(nèi)網(wǎng)IP與后端服務(wù)器進(jìn)行通信。圖3中,瀏覽器的請(qǐng)求到達(dá)反向代理服務(wù)器114.113.200.84,反向代理服務(wù)器收到請(qǐng)求后,根據(jù)負(fù)載均衡算法計(jì)算得到一臺(tái)真實(shí)的后端服務(wù)器地址10.0.0.1,并將請(qǐng)求轉(zhuǎn)發(fā)到這臺(tái)后端服務(wù)器。10.0.0.1處理請(qǐng)求后將響應(yīng)返回給反向代理服務(wù)器,再由反向代理服務(wù)器將該響應(yīng)返回給用戶。
常見(jiàn)的反向代理服務(wù)器包括Nginx,Apache,Haproxy等。
優(yōu)點(diǎn)
部署比較簡(jiǎn)單,使用常見(jiàn)的反向代理服務(wù)器軟件即可部署反向代理服務(wù)器
調(diào)度策略豐富,例如,可以為不同的后端機(jī)器設(shè)置不同的分配權(quán)重, 這樣處理能力高的機(jī)器可以分配到較多的任務(wù),達(dá)到能者多勞的目的
反向代理服務(wù)器可以讓用戶在一次會(huì)話周期內(nèi)的所有請(qǐng)求始終分配到一臺(tái)特定的后端服務(wù)器(粘滯會(huì)話)
缺點(diǎn)
由于反向代理工作在HTTP層,所有請(qǐng)求都需要經(jīng)過(guò)反向代理服務(wù)器的處理,后端服務(wù)器的響應(yīng)結(jié)果也必須經(jīng)過(guò)反向代理服務(wù)器傳送給用戶,故這種負(fù)載均衡方式要求反向代理的并發(fā)處理能力較高。
IP負(fù)載均衡
我們已了解前面幾種負(fù)載均衡的方法,這些負(fù)載均衡都是工作在HTTP層,那么,能否在HTTP層以下來(lái)實(shí)現(xiàn)負(fù)載均衡呢?答案是肯定的。事實(shí)上,在數(shù)據(jù)鏈路層(第二層),網(wǎng)絡(luò)層(第三層),以及傳輸層(第四層)都可以實(shí)現(xiàn)不同機(jī)制的負(fù)載均衡。但與HTTP層機(jī)制不同,這些負(fù)載均衡調(diào)度的工作必須由Linux內(nèi)核來(lái)完成,即網(wǎng)絡(luò)數(shù)據(jù)包在從內(nèi)核緩沖區(qū)進(jìn)入用戶進(jìn)程空間前,已完成轉(zhuǎn)發(fā)的工作。
在網(wǎng)絡(luò)層通過(guò)修改請(qǐng)求目的地址進(jìn)行負(fù)載均衡的流程如圖4所示。
圖4:IP負(fù)載均衡
用戶請(qǐng)求到達(dá)負(fù)載均衡服務(wù)器114.113.200.84,負(fù)載均衡服務(wù)器在操作系統(tǒng)內(nèi)核獲取網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)負(fù)載均衡算法計(jì)算得到一臺(tái)真實(shí)的后端服務(wù)器10.0.0.1,然后將數(shù)據(jù)包的目地址改為10.0.0.1,不需要用戶進(jìn)程處理。后端服務(wù)器10.0.0.1處理完成后,響應(yīng)數(shù)據(jù)包返回到負(fù)載均衡服務(wù)器,負(fù)載均衡服務(wù)器再將數(shù)據(jù)包源地址修改為自身的IP地址(114.113.200.84)發(fā)送給用戶。
優(yōu)點(diǎn)
IP負(fù)載均衡在內(nèi)核進(jìn)程完成數(shù)據(jù)分發(fā),處理性能得到了很大的提高。
缺點(diǎn)
由于所有請(qǐng)求和響應(yīng)都要經(jīng)過(guò)負(fù)載均衡服務(wù)器,系統(tǒng)的最大吞吐量仍然受到負(fù)載均衡服務(wù)器網(wǎng)卡帶寬的限制。對(duì)于提供下載服務(wù)或者視頻服務(wù)等需要傳輸大量數(shù)據(jù)站點(diǎn),IP負(fù)載均衡的方式是難以滿足需求的。
數(shù)據(jù)鏈路層負(fù)載均衡
數(shù)據(jù)鏈路層負(fù)載均衡通過(guò)修改數(shù)據(jù)幀的MAC地址來(lái)實(shí)現(xiàn)負(fù)載均衡的目的。數(shù)據(jù)鏈路層是OSI網(wǎng)絡(luò)模型的第二層,由于數(shù)據(jù)鏈路層負(fù)載均衡的方法走的是MAC層的協(xié)議,因此需要負(fù)載均衡服務(wù)器和后端服務(wù)器處在同一個(gè)二層(同一個(gè)廣播域)之中。
數(shù)據(jù)鏈路層負(fù)載均衡的工作流程如圖所示:
圖5:數(shù)據(jù)鏈路層實(shí)現(xiàn)負(fù)載均衡
圖5所示的數(shù)據(jù)傳輸方式又稱作三角傳輸模式,負(fù)載均衡數(shù)據(jù)分發(fā)過(guò)程中不修改IP址,只修改MAC地址,通過(guò)配置后端服務(wù)器與負(fù)載均衡服務(wù)器具有相同的IP地址,從而達(dá)到不修改數(shù)據(jù)包的源IP地址和目的IP地址就可以進(jìn)行數(shù)據(jù)分發(fā)的目的。由于后端服務(wù)器的IP和數(shù)據(jù)請(qǐng)求目的IP一致,不需要通過(guò)負(fù)載均衡服務(wù)器進(jìn)行地址轉(zhuǎn)換,可以將響應(yīng)數(shù)據(jù)包直接返回給用戶瀏覽器,避免負(fù)載均衡服務(wù)器網(wǎng)卡帶寬成為瓶頸。
圖5中,用戶請(qǐng)求到達(dá)負(fù)載均衡服務(wù)器114.113.200.84,負(fù)載均衡服務(wù)器將請(qǐng)求數(shù)據(jù)的目的MAC地址必為00.0c.29.d2,并不修改數(shù)據(jù)包目的IP地址,由于后端服務(wù)器與負(fù)載均衡服務(wù)器并有相同的IP地址,因此數(shù)據(jù)可以正常傳輸?shù)竭_(dá)00.0c.29.d2對(duì)應(yīng)的服務(wù)器,該服務(wù)器處理完成后將響應(yīng)數(shù)據(jù)直接返回給用戶,不需要經(jīng)過(guò)負(fù)載均衡服務(wù)器。
在Linux平臺(tái)上最好的數(shù)據(jù)鏈路層負(fù)載均衡的開(kāi)源產(chǎn)品是LVS(Linux Virtual Server)。LVS有三種運(yùn)行模式,分別為NAT模式,TUN模式,DR模式。DR模式正是運(yùn)行在數(shù)據(jù)鏈路層,通過(guò)修改數(shù)據(jù)幀的MAC地址來(lái)實(shí)現(xiàn)負(fù)載均衡的。
優(yōu)點(diǎn)
數(shù)據(jù)鏈路層負(fù)載均衡工作在Linux內(nèi)核進(jìn)程,性能很高
后端服務(wù)器的響應(yīng)不需要再次經(jīng)過(guò)負(fù)載均衡服務(wù)器,解決了負(fù)載均衡服務(wù)器網(wǎng)卡流量瓶頸的問(wèn)題
缺點(diǎn)
可配置性較高,并不支持復(fù)雜的調(diào)度策略。
參考資料
大型網(wǎng)站技術(shù)架構(gòu)——核心原理與安全分析,李智慧著,電子工業(yè)出版社
構(gòu)建高性能Web站點(diǎn),郭欣著,中國(guó)工信出版集團(tuán),電子工業(yè)出版社
HTTP權(quán)威指南,David Gourley等著,人民郵電出版社
https://segmentfault.com/a/1190000002578457
http://baike.baidu.com/item/DNS負(fù)載均衡
http://blog.csdn.net/asqi1/article/details/41478111
聯(lián)系客服