什麼是四層和七層負載均衡?他們之間的區別是什麼?
在網站創立初期,我們一般都使用單臺機器對臺提供集中式服務,但是隨著業務量越來越大,無論是效能上還是穩定性上都有了更大的挑戰。這時候我們就會想到通過擴容的方式來提供更好的服務。
我們一般會把多臺機器組成一個叢集對外提供服務。然而,我們的網站對外提供的訪問入口都是一個的,比如www.taobao.com。那麼當用戶在瀏覽器輸入www.taobao.com的時候如何將使用者的請求分發到叢集中不同的機器上呢,這就是負載均衡在做的事情。

網路技術
(一)簡單理解四層和七層負載均衡:
① 所謂四層就是基於IP+埠的負載均衡;七層就是基於URL等應用層資訊的負載均衡;同理,還有基於MAC地址的二層負載均衡和基於IP地址的三層負載均衡。 換句換說,二層負載均衡會通過一個虛擬MAC地址接收請求,然後再分配到真實的MAC地址;三層負載均衡會通過一個虛擬IP地址接收請求,然後再分配到真實的IP地址;四層通過虛擬IP+埠接收請求,然後再分配到真實的伺服器;七層通過虛擬的URL或主機名接收請求,然後再分配到真實的伺服器。
② 所謂的四到七層負載均衡,就是在對後臺的伺服器進行負載均衡時,依據四層的資訊或七層的資訊來決定怎麼樣轉發流量。 比如四層的負載均衡,就是通過釋出三層的IP地址(VIP),然後加四層的埠號,來決定哪些流量需要做負載均衡,對需要處理的流量進行NAT處理,轉發至後臺伺服器,並記錄下這個TCP或者UDP的流量是由哪臺伺服器處理的,後續這個連線的所有流量都同樣轉發到同一臺伺服器處理。七層的負載均衡,就是在四層的基礎上(沒有四層是絕對不可能有七層的),再考慮應用層的特徵,比如同一個Web伺服器的負載均衡,除了根據VIP加80埠辨別是否需要處理的流量,還可根據七層的URL、瀏覽器類別、語言來決定是否要進行負載均衡。舉個例子,如果你的Web伺服器分成兩組,一組是中文語言的,一組是英文語言的,那麼七層負載均衡就可以當用戶來訪問你的域名時,自動辨別使用者語言,然後選擇對應的語言伺服器組進行負載均衡處理。
③ 負載均衡器通常稱為四層交換機或七層交換機。四層交換機主要分析IP層及TCP/UDP層,實現四層流量負載均衡。七層交換機除了支援四層負載均衡以外,還有分析應用層的資訊,如HTTP協議URI或Cookie資訊。
- 負載均衡分為L4 switch(四層交換),即在OSI第4層工作,就是TCP層啦。此種Load Balance不理解應用協議(如HTTP/FTP/MySQL等等)。例子:LVS,F5。
- 另一種叫做L7 switch(七層交換),OSI的最高層,應用層。此時,該Load Balancer能理解應用協議。例子: haproxy,MySQL Proxy。
注意:上面的很多Load Balancer既可以做四層交換,也可以做七層交換。

(二)負載均衡裝置也常被稱為”四到七層交換機”,那麼四層和七層兩者到底區別在哪裡?
第一,技術原理上的區別。
所謂四層負載均衡,也就是主要通過報文中的目標地址和埠,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。
以常見的TCP為例,負載均衡裝置在接收到第一個來自客戶端的SYN 請求時,即通過上述方式選擇一個最佳的伺服器,並對報文中目標IP地址進行修改(改為後端伺服器IP),直接轉發給該伺服器。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等系統。

第三,七層應用需要考慮的問題。
1:是否真的必要,七層應用的確可以提高流量智慧化,同時必不可免的帶來裝置配置複雜,負載均衡壓力增高以及故障排查上的複雜性等問題。在設計系統時需要考慮四層七層同時應用的混雜情況。
2:是否真的可以提高安全性。例如SYN Flood攻擊,七層模式的確將這些流量從伺服器遮蔽,但負載均衡裝置本身要有強大的抗DDoS能力,否則即使伺服器正常而作為中樞排程的負載均衡裝置故障也會導致整個應用的崩潰。
3:是否有足夠的靈活度。七層應用的優勢是可以讓整個應用的流量智慧化,但是負載均衡裝置需要提供完善的七層功能,滿足客戶根據不同情況的基於應用的排程。最簡單的一個考核就是能否取代後臺Nginx或者Apache等伺服器上的排程功能。能夠提供一個七層應用開發介面的負載均衡裝置,可以讓客戶根據需求任意設定功能,才真正有可能提供強大的靈活性和智慧性。
(三)負載均衡四七層介紹:
負載均衡(Load Balance)建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴充套件網路裝置和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。
負載均衡有兩方面的含義:首先,大量的併發訪問或資料流量分擔到多臺節點裝置上分別處理,減少使用者等待響應的時間;其次,單個重負載的運算分擔到多臺節點裝置上做並行處理,每個節點裝置處理結束後,將結果彙總,返回給使用者,系統處理能力得到大幅度提高。
本文所要介紹的負載均衡技術主要是指在均衡伺服器群中所有伺服器和應用程式之間流量負載的應用,目前負載均衡技術大多數是用於提高諸如在Web伺服器、FTP伺服器和其它關鍵任務伺服器上的Internet伺服器程式的可用性和可伸縮性。

負載均衡技術分類
目前有許多不同的負載均衡技術用以滿足不同的應用需求,下面從負載均衡所採用的裝置物件、應用的網路層次(指OSI參考模型)及應用的地理結構等來分類。
軟/硬體負載均衡
軟體負載均衡解決方案是指在一臺或多臺伺服器相應的作業系統上安裝一個或多個附加軟體來實現負載均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的優點是基於特定環境,配置簡單,使用靈活,成本低廉,可以滿足一般的負載均衡需求。
軟體解決方案缺點也較多,因為每臺伺服器上安裝額外的軟體執行會消耗系統不定量的資源,越是功能強大的模組,消耗得越多,所以當連線請求特別大的時候,軟體本身會成為伺服器工作成敗的一個關鍵;軟體可擴充套件性並不是很好,受到作業系統的限制;由於作業系統本身的Bug,往往會引起安全問題。
硬體負載均衡解決方案是直接在伺服器和外部網路間安裝負載均衡裝置,這種裝置我們通常稱之為負載均衡器,由於專門的裝置完成專門的任務,獨立於作業系統,整體效能得到大量提高,加上多樣化的負載均衡策略,智慧化的流量管理,可達到最佳的負載均衡需求。
負載均衡器有多種多樣的形式,除了作為獨立意義上的負載均衡器外,有些負載均衡器整合在交換裝置中,置於伺服器與Internet連結之間,有些則以兩塊網路介面卡將這一功能整合到PC中,一塊連線到Internet上,一塊連線到後端伺服器群的內部網路上。
一般而言,硬體負載均衡在功能、效能上優於軟體方式,不過成本昂貴。