1. 程式人生 > 實用技巧 >六大Web負載均衡原理與實現

六大Web負載均衡原理與實現

六大Web負載均衡原理與實現

一、http重定向

[協議層] http重定向協議實現負載均衡

原理:根據使用者的http請求計算出一個真實的web伺服器地址,並將該web伺服器地址寫入http重定向響應中返回給瀏覽器,由瀏覽器重新進行訪問

img

優點:比較簡單

缺點:

(1) 瀏覽器需要每次請求伺服器才能完成一次訪問,效能較差。

http重定向伺服器自身的處理能力可能成為瓶頸。

使用http302響應重定向,有可能使搜尋引擎判斷為SEO作弊,降低搜尋排名。

當http代理(比如瀏覽器)向web伺服器請求某個URL後,web伺服器可以通過http響應頭資訊中的Location標記來返回一個新的URL。這意味著HTTP代理需要繼續請求這個新的URL,完成自動跳轉。

(2)、吞吐率限制

主站點伺服器的吞吐率平均分配到了被轉移的伺服器。現假設使用RR(Round Robin)排程策略,子伺服器的最大吞吐率為1000reqs/s,那麼主伺服器的吞吐率要達到3000reqs/s才能完全發揮三臺子伺服器的作用,那麼如果有100臺子伺服器,那麼主伺服器的吞吐率可想而知得有大?相反,如果主服務的最大吞吐率為6000reqs/s,那麼平均分配到子伺服器的吞吐率為2000reqs/s,而現子伺服器的最大吞吐率為1000reqs/s,因此就得增加子伺服器的數量,增加到6個才能滿足。

(3)、重定向訪問深度不同

有的重定向一個靜態頁面,有的重定向相比複雜的動態頁面,那麼實際伺服器的負載差異是不可預料的,而主站伺服器卻一無所知。因此整站使用重定向方法做負載均衡不太好。

我們需要權衡轉移請求的開銷和處理實際請求的開銷,前者相對於後者越小,那麼重定向的意義就越大,例如下載。你可以去很多映象下載網站試下,會發現基本下載都使用了Location做了重定向。

二、DNS負載均衡(採用的是簡單的輪詢演算法)

[協議層】dns域名解析負載均衡

原理:在DNS伺服器上配置多個域名對應IP的記錄。例如一個域名www.baidu.com對應一組web伺服器IP地址,域名解析時經過DNS伺服器的演算法將一個域名請求分配到合適的真實伺服器上。

img

優點:將負載均衡的工作交給了DNS,省卻了網站管理維護負載均衡伺服器的麻煩,同事許多DNS還支援基於地理位置的域名解析,將域名解析成距離使用者地理最近的一個伺服器地址,加快訪問速度嗎,改善效能。

缺點:目前的DNS解析是多級解析,每一級DNS都可能化快取記錄A,當某一伺服器下線後,該伺服器對應的DNS記錄A可能仍然存在,導致分配到該伺服器的使用者訪問失敗。

三、反向代理負載均衡

【協議層】反向代理負載均衡 反向代理伺服器工作在HTTP層

原理:反向代理處於web伺服器這邊,反向代理伺服器提供負載均衡的功能,同時管理一組web伺服器,它根據負載均衡演算法將請求的瀏覽器訪問轉發到不同的web伺服器處理,處理結果經過反向伺服器返回給瀏覽器。

img

例如:瀏覽器訪問請求的地址是反向代理伺服器的地址114.100.80.10,反向代理伺服器收到請求,經過負載均衡演算法後得到一個真實實體地址10.0.03,並將請求結果發給真實的服務,真實伺服器處理完後通過反向代理伺服器返回給請求使用者。

優點:部署簡單,處於http協議層面。

缺點:使用了反向代理伺服器後,web 伺服器地址不能直接暴露在外,因此web伺服器不需要使用外部IP地址,而反向代理服務作為溝通橋樑就需要配置雙網絡卡、外部內部兩套IP地址。

四、IP負載均衡-NAT(LVS-NAT Linux Virtual Server-Network Address Translation)

【四層架構的傳輸層】IP負載均衡

原理:通過修改目標地址進行負載均衡。

img

使用者訪問請求到達負載均衡伺服器,負載均衡伺服器在作業系統核心程序獲取網路資料包,根據演算法得到一臺真實伺服器地址,然後將使用者請求的目標地址修改成該真實伺服器地址,資料處理完後返回給負載均衡伺服器,負載均衡伺服器收到響應後將自身的地址修改成原使用者訪問地址後再講資料返回回去。類似於反向伺服器負載均衡。

優點:在響應請求時速度較反向伺服器負載均衡要快。

缺點:當請求資料較大(大型視訊或檔案)時,速度較慢。

因為反向代理伺服器工作在HTTP層,其本身的開銷就已經嚴重製約了可擴充套件性,從而也限制了它的效能極限。那能否在HTTP層面以下實現負載均衡呢?

NAT伺服器:它工作在傳輸層,它可以修改傳送來的IP資料包,將資料包的目標地址修改為實際伺服器地址。

五、直接路由( IP負載均衡-DR)

(LVS-DR Linux Virtual Server Direct Routing)

[鏈路層】資料鏈路層負載均衡

原理:在資料鏈路層修改Mac地址進行負載均衡。 img

負載均衡伺服器的IP和它所管理的web 服務群的虛擬IP一致;

負載均衡資料分發過程中不修改訪問地址的IP地址,而是修改Mac地址;

通過這兩點達到不修改資料包的原地址和目標地址就可以進行正常的訪問。

優點:不需要負載均衡伺服器進行地址的轉換。資料響應時不需要經過負載均衡伺服器。

缺點:負載均衡伺服器的網絡卡頻寬要求較高。

目前連路程負載均衡是特別常見的一種手段,典型的產品有LVS(Linux Virtual Server)。

NAT是工作在網路分層模型的傳輸層(第四層),而直接路由是工作在資料鏈路層(第二層),貌似更屌些。它通過修改資料包的目標MAC地址(沒有修改目標IP),將資料包轉發到實際伺服器上,不同的是,實際伺服器的響應資料包將直接傳送給客戶羰,而不經過排程器。

六、IP隧道 (IP負載均衡-Tunneling)(LVS-TUN Linux Virtaul Server Tunneling) [實際伺服器和排程器可以不再同一個網段]

基於IP隧道的請求轉發機制:將排程器收到的IP資料包封裝在一個新的IP資料包中,轉交給實際伺服器,然後實際伺服器的響應資料包可以直接到達使用者端。目前Linux大多支援,可以用LVS來實現,稱為LVS-TUN,與LVS-DR不同的是,實際伺服器可以和排程器不在同一個WANt網段,排程器通過IP隧道技術來轉發請求到實際伺服器,所以實際伺服器也必須擁有合法的IP地址。

總體來說,LVS-DR和LVS-TUN都適合響應和請求不對稱的Web伺服器,如何從它們中做出選擇,取決於你的網路部署需要,因為LVS-TUN可以將實際伺服器根據需要部署在不同的地域,並且根據就近訪問的原則來轉移請求,所以有類似這種需求的,就應該選擇LVS-TUN。