在軟件架構(gòu)設(shè)計過程中,解決軟件高并發(fā)問題,軟件可用性,及軟件伸縮性等,最好的解決方案就是服務(wù)器進行集群,然后負載均衡轉(zhuǎn)發(fā)了。那么負載均衡有哪幾種方案可供選擇,各自的又有什么優(yōu)缺點了?
一、HTTP重定向負載均衡
HTTP重定向服務(wù)器是一臺 普通的應(yīng)用服務(wù)器,其唯一的功能就是根據(jù)用戶的HTTP請求計算一臺真實的Web服務(wù)器地址,并將該Web服務(wù)器地址寫入HTTP重定向響應(yīng)中(響應(yīng)狀態(tài)碼302 )返回給用戶瀏覽器,瀏覽器再根據(jù)響應(yīng)的地址進行請求。

這種負載均衡方案的優(yōu)點是比較簡單。缺點是瀏覽器需要兩次請求服務(wù)器才能完成一次訪問,性能較差;重定向服務(wù)器自身的處理能力有可能成為瓶頸,整個集群的伸縮性規(guī)模有限;使用HTTP302響應(yīng)碼重定向,有可能使搜索引擎判斷為seo作弊,降低搜索排名。因此實踐中使用這種方案進行負載均衡的案例并不多見。
二、DNS域名解析負載均衡
這是利用DNS處理域名解析請求的同時進行負載均衡處理的一種方案,在DNS服務(wù)器中配置多個A記錄,如: www.mysite.com IN A 114.100.80.1、www.mysite.com IN A 114.100.80.2、www.mysite.com IN A 114. 100.80.3。每次域名解析請求都會根據(jù)負載均衡算法計算一個不同的IP地址返回,這樣A記錄中配置的多個服務(wù)器就構(gòu)成一個集群, 并可以實現(xiàn)負載均衡。

DNS域名解析負載均衡的優(yōu)點是將負載均衡的工作轉(zhuǎn)交給DNS,省掉了網(wǎng)站管理維護負載均衡服務(wù)器的麻煩,同時許多DNS還支持基于地理位置的域名解析,即會將域名解析成距離用戶地理最近的一個服務(wù)器地址,這樣可加快用戶訪問速度,改善性能。
但是DNS域名解析負載均衡也有缺點,就是目前的DNS是多級解析,每一-級DNS都可能緩存A記錄,當(dāng)下線某臺服務(wù)器后,即使修改了DNS的A記錄,要使其生效也需要較長時間,這段時間,DNS依然會將域名解析到已經(jīng)下線的服務(wù)器,導(dǎo)致用戶訪問失敗;而且DNS負載均衡的控制權(quán)在域名服務(wù)商那里,網(wǎng)站無法對其做更多改善和更強大的管理。
事實上,大型網(wǎng)站總是部分使用DNS域名解析,利用域名解析作為第一級負載均衡手段,即域名解析得到的一組服務(wù)器并不是實際提供Web服務(wù)的物理服務(wù)器,而是同樣提供負載均衡服務(wù)的內(nèi)部服務(wù)器,這組內(nèi)部負載均衡服務(wù)器再進行負載均衡,將請求分發(fā)到真實的Web服務(wù)器上。
三、反向代理負載均衡
通過代向代理服務(wù)器,管理一組Web服務(wù)器,將請求根據(jù)負載均衡算法轉(zhuǎn)發(fā)到不同Web服務(wù)器上。Web 服務(wù)器處理完成的響應(yīng)也需要通過反向代理服務(wù)器返回給用戶。由于Web服務(wù)器不直接對外提供訪問,因此Web服務(wù)器不需要使用外部IP地址,而反向代理服務(wù)器則需要配置雙網(wǎng)卡和內(nèi)部外部兩套IP地址。
由于反向代理服務(wù)器轉(zhuǎn)發(fā)請求在HTTP協(xié)議層面,因此也叫應(yīng)用層負載均衡。其優(yōu)點是和反向代理服務(wù)器功能集成在一起,部署簡單。缺點是反向代理服務(wù)器是所有請求和響應(yīng)的中轉(zhuǎn)站,其性能可能會成為瓶頸,不過對于一些并發(fā)量不是特別大的網(wǎng)站夠用了。

四、IP負載均衡
IP負載均衡在網(wǎng)絡(luò)層通過修改請求目標(biāo)地址進行負載均衡,用戶請求數(shù)據(jù)包到達負載均衡服務(wù)器后,負載均衡服務(wù)器在操作系統(tǒng)內(nèi)核進程獲取網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)負載均衡算法計算得到一臺真實Web服務(wù)器, 然后將數(shù)據(jù)目的IP地址修改為真實Web服務(wù)器, 不需要通過用戶進程處理。真實Web應(yīng)用服務(wù)器處理完成后,響應(yīng)數(shù)據(jù)包回到負載均衡服務(wù)器,負載均衡服務(wù)器再將數(shù)據(jù)包源地址修改為自身的IP地址發(fā)送給用戶瀏覽器。

IP 負載均衡在內(nèi)核進程完成數(shù)據(jù)分發(fā),較反向代理負載均衡(在應(yīng)用程序中分發(fā)數(shù)據(jù))有更好的處理性能。但是由于所有請求響應(yīng)都需要經(jīng)過負載均衡服務(wù)器,集群的最大響應(yīng)數(shù)據(jù)吞吐量不得不受制于負載均衡服務(wù)器網(wǎng)卡帶寬。對于提供下載服務(wù)或者視頻服務(wù)等需要傳輸大量數(shù)據(jù)的網(wǎng)站而言,難以滿足需求。能不能讓負載均衡服務(wù)器只分發(fā)請求,而使響應(yīng)數(shù)據(jù)從真實物理服務(wù)器直接返回給用戶呢?
五、數(shù)據(jù)鏈路層負載均衡
顧名思義,數(shù)據(jù)鏈路層負載均衡是指在通信協(xié)議的數(shù)據(jù)鏈路層修改mac地址進行負載均衡,如圖6.9所示。
這種數(shù)據(jù)傳輸方式又稱作三角傳輸模式,負載均衡數(shù)據(jù)分發(fā)過程中不修改IP地址,只修改目的mac地址,通過配置真實物理服務(wù)器集群所有機器虛擬IP和負載均衡服務(wù)器IP地址一致,從而達到不修改數(shù)據(jù)包的源地址和目的地址就可以進行數(shù)據(jù)分發(fā)的目的,由于實際處理請求的真實物理服務(wù)器IP和數(shù)據(jù)請求目的IP一致,不需要通過負載均衡服務(wù)器進行地址轉(zhuǎn)換,可將響應(yīng)數(shù)據(jù)包直接返回給用戶瀏覽器,避免負載均衡服務(wù)器網(wǎng)卡帶寬成為瓶頸。這種負載均衡方式又稱作直接路由方式(DR )。
使用三角傳輸模式的鏈路層負載均衡是目前大型網(wǎng)站使用最廣的一種負載均衡手段。如HAproxy,LVS等都是采用這種策略。
