背景
我們在使用負載均衡器的時候,往往會聽到七層負載或四層負載這兩個名詞,許多負載均衡軟件提供的方式也不同,那么七層和四層區別在哪呢?為什么有的支持有的不支持呢?
負載均衡簡介
負載均衡建立在現有網絡結構之上,提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、增強網絡數據處理能力、提高網絡的靈活性和可用性。
簡單來講:負載均衡將大量的并發處理轉發給后端多個節點處理,減少工作響應時間;處理完成后返回給負載均衡器,再返回給用戶。目前負載均衡大多數用于提高諸如在Web服務器、FTP服務器和其他關鍵任務服務器上的Internet服務器陳股的可用性和可伸縮性。
負載均衡分類
- 二層負載:一般是虛擬Mac地址方式,外部對虛擬MAC地址請求,負載均衡接收后分配后端實際的MAC地址響應。(mac)
- 三層負載:一般采用虛擬IP地址方式,外部對虛擬的IP地址請求,負載均衡器接收后分配后端實際的IP地址相應。(ip)
- 四層負載:在三層負載的基礎之上,用ip+端口接收請求,再轉發到對應的機器(tcp)
- 七層負載:根據虛擬的URL或IP,主機名接收請求,再轉向相應的處理服務器。(如http)
負載均衡算法
- 輪詢
- 權重輪詢
- 隨機
- 權重隨機
- 響應速度
- 最少連接數
- 處理能力
- DNS相應
四層負載
四層負載就是基于IP+Port的負載均衡;在三層負載的基礎之上,通過發布三層的IP地址,然后加上四層的端口號,來決定哪些流量需要做負載均衡。 四層負載均衡器主要分析IP和TCP/UDP層,實現負載均衡;但是它不理解應用層協議,也就是我們常常提到的HTTP協議,其他協議如FTP、Mysql協議等。
支持四層負載的軟硬負載均衡器
F5、nginx、lvs、haproxy
七層負載
七層負載均衡基于虛擬的URL或主機IP的負載均衡:在四層負載均衡的基礎上(沒有四層負載就不可能有七層負載),再考慮應用層的特征,比如同一個web服務器的負載均衡,除了根據vip和80端口辨別是否需要處理的流量,還可以根據七層的URL、瀏覽器類別、語言來決定是否需要進行負載均衡。
七層負載均衡器除了支持四層負載均衡以外,還有分析應用層的信息,如HTTP協議URI或Cookie信息,實現七層負載均衡。此種負載均衡器能理解應用協議。(所以支持Mysql,RabbitMQ等協議的負載)
支持七層負載的軟硬件負載均衡器
haproxy、nginx
總的來說,一般是lvs做四層負載;nginx做7層負載(默認只支持HTTP反向代理,可以考慮加入nginx_tcp_proxy_module模塊實現對tcp的代理);haproxy比較靈活7層負載和四層負載都能做。
七層負載最關注的是Http協議,對其他協議關注度并不是很高,其他如Mysql、RabbitMQ等中間件的負載可以考慮使用四層負載,因為四層負載是基于IP+端口的負載,這個往往就夠了。
四層和七層的對比
第一,技術原理上的區別
所謂四層負載均衡,也就是主要通過報文中的目標地址和端口,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。
以常見的TCP為例,負載均衡設備在接收到第一個來自客戶端的SYN 請求時,即通過上述方式選擇一個最佳的服務器,并對報文中目標IP地址進行修改(改為后端服務器IP),直接轉發給該服務器。
TCP的連接建立,即三次握手是客戶端和服務器直接建立的,負載均衡設備只是起到一個類似路由器的轉發動作。在某些部署情況下,為保證服務器回包可以正確返回給負載均衡設備,在轉發報文的同時可能還會對報文原來的源地址進行修改。

4層
所謂七層負載均衡,也稱為“內容交換”,也就是主要通過報文中的真正有意義的應用層內容,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。
七層負載均衡明顯的對負載均衡設備的要求更高,處理七層的能力也必然會低于四層模式的部署方式。

7層
第二,應用場景的需求
七層應用負載的好處,是使得整個網絡更"智能化"。
對圖片、靜態資源做緩存、對header重寫、對url重寫、對請求進行校驗、做黑白名單等等
總體對比
1.智能性 七層負載均衡由于具備OIS七層的所有功能,所以在處理用戶需求上能更加靈活,從理論上講,七層模型能對用戶的所有跟服務端的請求進行修改。例如對文件header添加信息,根據不同的文件類型進行分類轉發。四層模型僅支持基于網絡層的需求轉發,不能修改用戶請求的內容。
2.安全性 七層負載均衡由于具有OSI模型的全部功能,能更容易抵御來自網絡的攻擊;四層模型從原理上講,會直接將用戶的請求轉發給后端節點,無法直接抵御網絡攻擊。
3.復雜度 四層模型一般比較簡單的架構,容易管理,容易定位問題;七層模型架構比較復雜,通常也需要考慮結合四層模型的混用情況,出現問題定位比較復雜。
4.效率比 四層模型基于更底層的設置,通常效率更高,但應用范圍有限;七層模型需要更多的資源損耗,在理論上講比四層模型有更強的功能,現在的實現更多是基于http應用。