現在我們知道,負載均衡就是一種計算機網路技術,用來在多個計算機(計算機集群)、網路連線、cpu、磁碟驅動器或其他資源中分配負載,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。那麼,這種計算機技術的實現方式有多種。大致可以分為以下幾種,其中最常用的是四層和七層負載均衡:
所謂四層即運輸層,就是基於 ip + 埠的負載均衡;七層即應用層,就是基於 url 等應用層資訊的負載均衡;同理,還有基於 mac 位址的二層負載均衡和基於 ip 位址的三層負載均衡。
所謂的四到七層負載均衡,就是在對後台的伺服器進行負載均衡時,依據四層的資訊或七層的資訊來決定怎麼樣**流量。
舉個例子,如果你的 web 伺服器分成兩組,一組是中文語言的,一組是英文語言的,那麼七層負載均衡就可以當使用者來訪問你的網域名稱時,自動辨別使用者語言,然後選擇對應的語言伺服器組進行負載均衡處理。
負載均衡器通常稱為四層交換機或七層交換機。
l4 switch(四層交換),即在 osi 第 4 層工作,就是 tcp 層啦。此種 load balancer 不理解應用協議(如 http/ftp/mysql 等等)。例子:lvs,f5。
l7 switch(七層交換),osi 的最高層,應用層。此時,該 load balancer 能理解應用協議。例子: haproxy,mysql proxy。
注意:上面的很多 load balancer 既可以做四層交換,也可以做七層交換。
當前可以看到對於 f5, array 等硬體負載均衡裝置本身也是支援 7 層負載均衡的,同時在 4 層負載均衡的時候我們還可以設定是否進行會話保持等高階特性。
4 層負載均衡本質是**,而 7 層負載本質是內容交換和**。
主要通過報文中的目標位址和埠,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。
以常見的 tcp 為例,負載均衡裝置在接收到第乙個來自客戶端的 syn 請求時,即通過上述方式選擇乙個最佳的伺服器, 並對報文中的目標 ip 位址進行修改(改為後端伺服器 ip),直接**給該伺服器。 tcp 的連線建立,即三次握手是客戶端和伺服器直接建立的,負載均衡裝置只是起到乙個類似路由器的**動作。
在某些部署情況下,為保證伺服器回包可以正確返回給負載均衡裝置,在**報文的同時可能還會對報文原來的源位址進行修改。
七層負載均衡也稱為「內容交換」,也就是主要通過報文中的真正有意義的應用層內容,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。
以常見的 tcp 為例,負載均衡裝置如果要根據真正的應用層內容再選擇伺服器,只能先**最終的伺服器和客戶端建立連線(tcp 三次握手)後,才可能接收到客戶端傳送的真正應用層內容的報文, 然後再根據該報文中的特定字段,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。
負載均衡裝置在這種情況下,更類似於乙個**伺服器。負載均衡和前端的客戶端以及後端的伺服器會分別建立 tcp 連線。所以從這個技術原理上來看,七層負載均衡明顯地對負載均衡裝置的要求更高,處理七層的能力也必然會低於四層模式的部署方式。
七層應用負載均衡的好處,是使得整個網路更「智慧型化」, 例如訪問乙個**的使用者流量,可以通過七層的方式,將對類的請求**到特定的伺服器並可以使用快取技術;將對文字類的請求可以**到特定的文字伺服器並可以使用壓縮技術。
當然這只是七層應用的乙個小案例,從技術原理上,這種方式可以對客戶端的請求和伺服器的響應進行任意意義上的修改,極大的提公升了應用系統在網路層的靈活性。 很多在後台(例如 nginx 或者 apache )上部署的功能可以前移到負載均衡裝置上,例如客戶請求中的 header 重寫,伺服器響應中的關鍵字過濾或者內容插入等功能。
另外乙個常常被提到功能就是安全性。網路中最常見的 syn flood 攻擊,即黑客控制眾多源客戶端,使用虛假 ip 位址對同一目標傳送 syn 攻擊,通常這種攻擊會大量傳送 syn 報文,耗盡伺服器上的相關資源,以達到 denial of service(dos) 的目的。從技術原理上也可以看出,四層模式下這些 syn 攻擊都會被**到後端的伺服器上;而七層模式下這些 syn 攻擊自然在負載均衡裝置上就截止,不會影響後台伺服器的正常運營。
另外負載均衡裝置可以在七層層面設定多種策略,過濾特定報文,例如 sql injection 等應用層面的特定攻擊手段,從應用層面進一步提高系統整體安全。
現在的 7 層負載均衡,主要還是著重於應用廣泛的 http 協議,所以其應用範圍主要是眾多的**或者內部資訊平台等基於 b/s 開發的系統。 4 層負載均衡則對應其他 tcp 應用,例如基於 c/s 開發的 erp 等系統。
是否真的必要,七層應用的確可以提高流量智慧型化,同時必不可免的帶來裝置配置複雜,負載均衡壓力增高以及故障排查上的複雜性等問題。
在設計系統時需要考慮四層七層同時應用的混雜情況。
是否真的可以提高安全性。例如 syn flood 攻擊,七層模式的確將這些流量從伺服器遮蔽,但負載均衡裝置本身要有強大的抗 ddos 能力,
否則即使伺服器正常而作為中樞排程的負載均衡裝置故障也會導致整個應用的崩潰。
是否有足夠的靈活度。七層應用的優勢是可以讓整個應用的流量智慧型化,但是負載均衡裝置需要提供完善的七層功能,滿足客戶根據不同情況的基於應用的排程。
最簡單的乙個考核就是能否取代後台 nginx 或者 apache 等伺服器上的排程功能。能夠提供乙個七層應用開發介面的負載均衡裝置,可以讓客戶根據需求任意設定功能,才真正有可能提供強大的靈活性和智慧型性。
四層 七層負載均衡的區別
一 簡介 所謂四層就是基於ip 埠的負載均衡 七層就是基於url等應用層資訊的負載均衡 同理,還有基於mac位址的二層負載均衡和基於ip位址的三層負載均衡。換句換說,二層負載均衡會通過乙個虛擬mac位址接收請求,然後再分配到真實的mac位址 三層負載均衡會通過乙個虛擬ip位址接收請求,然後再分配到真...
四層負載均衡和七層負載均衡的區別
1.四層負責均衡 是通過報文中的目標位址和埠,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器與請求客戶端建立tcp連線,然後傳送client請求的資料。由上圖可知 在四層負載裝置中,把client傳送的報文目標位址 原來是負載均衡裝置的ip位址 根據均衡裝置設定的選擇web伺服器的...
四層負載均衡和七層負載均衡的區別
1.四層負責均衡 是通過報文中的目標位址和埠,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器與請求客戶端建立tcp連線,然後傳送client請求的資料。由上圖可知 在四層負載裝置中,把client傳送的報文目標位址 原來是負載均衡裝置的ip位址 根據均衡裝置設定的選擇web伺服器的...