https://www.jianshu.com/p/9826d866080a
1. 什么是負載均衡
負載均衡 建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
2. 負載均衡分類
負載均衡根據所采用的設備對象(軟/硬件負載均衡),應用的OSI網絡層次(網絡層次上的負載均衡),及應用的地理結構(本地/全局負載均衡)等來分類。本文着重介紹的是根據應用的 OSI 網絡層次來分類的兩個負載均衡類型。
我們先來看一張圖,相信很多同學對這張圖都不陌生,這是一張網絡模型圖,包含了 OSI 模型及 TCP/IP 模型,兩個模型雖然有一點點區別,但主要的目的是一樣的,模型圖描述了通信是怎么進行的。它解決了實現有效通信所需要的所有過程,並將這些過程划分為邏輯上的層。層可以簡單地理解成數據通信需要的步驟。

根據負載均衡所作用在 OSI 模型的位置不同,負載均衡可以大概分為以下幾類:
-
二層負載均衡(mac)
根據OSI模型分的二層負載,一般是用虛擬mac地址方式,外部對虛擬MAC地址請求,負載均衡接收后分配后端實際的MAC地址響應。
-
三層負載均衡(ip)
一般采用虛擬IP地址方式,外部對虛擬的ip地址請求,負載均衡接收后分配后端實際的IP地址響應。
-
四層負載均衡(tcp)
在三層負載均衡的基礎上,用ip+port接收請求,再轉發到對應的機器。
-
七層負載均衡(http)
根據虛擬的url或IP,主機名接收請求,再轉向相應的處理服務器。
在實際應用中,比較常見的就是四層負載及七層負載。這里也重點說下這兩種負載。
3. 四層負載均衡(基於IP+端口的負載均衡)
所謂四層負載均衡,也就是主要通過報文中的目標地址和端口,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。

-
在三層負載均衡的基礎上,通過發布三層的IP地址(VIP),然后加四層的端口號,來決定哪些流量需要做負載均衡,對需要處理的流量進行NAT處理,轉發至后台服務器,並記錄下這個TCP或者UDP的流量是由哪台服務器處理的,后續這個連接的所有流量都同樣轉發到同一台服務器處理。
-
以常見的TCP為例,負載均衡設備在接收到第一個來自客戶端的SYN 請求時,即通過上述方式選擇一個最佳的服務器,並對報文中目標IP地址進行修改(改為后端服務器IP),直接轉發給該服務器。TCP的連接建立,即三次握手是客戶端和服務器直接建立的,負載均衡設備只是起到一個類似路由器的轉發動作。在某些部署情況下,為保證服務器回包可以正確返回給負載均衡設備,在轉發報文的同時可能還會對報文原來的源地址進行修改。
-
對應的負載均衡器稱為四層交換機(L4 switch),主要分析IP層及TCP/UDP層,實現四層負載均衡。此種負載均衡器不理解應用協議(如HTTP/FTP/MySQL等等)
要處理的流量進行NAT處理,轉發至后台服務器,並記錄下這個TCP或者UDP的流量是由哪台服務器處理的,后續這個連接的所有流量都同樣轉發到同一台服務器處理。 -
實現四層負載均衡的軟件有:
- F5:硬件負載均衡器,功能很好,但是成本很高。
- lvs:重量級的四層負載軟件
- nginx:輕量級的四層負載軟件,帶緩存功能,正則表達式較靈活
- haproxy:模擬四層轉發,較靈活
4. 七層的負載均衡(基於虛擬的URL或主機IP的負載均衡)
所謂七層負載均衡,也稱為“內容交換”,也就是主要通過報文中的真正有意義的應用層內容,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。

-
在四層負載均衡的基礎上(沒有四層是絕對不可能有七層的),再考慮應用層的特征,比如同一個Web服務器的負載均衡,除了根據VIP加80端口辨別是否需要處理的流量,還可根據七層的URL、瀏覽器類別、語言來決定是否要進行負載均衡。舉個例子,如果你的Web服務器分成兩組,一組是中文語言的,一組是英文語言的,那么七層負載均衡就可以當用戶來訪問你的域名時,自動辨別用戶語言,然后選擇對應的語言服務器組進行負載均衡處理。
-
以常見的TCP為例,負載均衡設備如果要根據真正的應用層內容再選擇服務器,只能先代理最終的服務器和客戶端建立連接(三次握手)后,才可能接受到客戶端發送的真正應用層內容的報文,然后再根據該報文中的特定字段,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。負載均衡設備在這種情況下,更類似於一個代理服務器。負載均衡和前端的客戶端以及后端的服務器會分別建立TCP連接。所以從這個技術原理上來看,七層負載均衡明顯的對負載均衡設備的要求更高,處理七層的能力也必然會低於四層模式的部署方式。
-
對應的負載均衡器稱為七層交換機(L7 switch),除了支持四層負載均衡以外,還有分析應用層的信息,如HTTP協議URI或Cookie信息,實現七層負載均衡。此種負載均衡器能理解應用協議。
-
實現七層負載均衡的軟件有:
- haproxy:天生負載均衡技能,全面支持七層代理,會話保持,標記,路徑轉移;
- nginx:只在http協議和mail協議上功能比較好,性能與haproxy差不多;
- apache:功能較差
- Mysql proxy:功能尚可。
5. 兩者之間的區別
舉個例子形象的說明:四層負載均衡就像銀行的自助排號機,每一個達到銀行的客戶根據排號機的順序,選擇對應的窗口接受服務;而七層負載均衡像銀行大堂經理,先確認客戶需要辦理的業務,再安排排號。這樣辦理理財、存取款等業務的客戶,會根據銀行內部資源得到統一協調處理,加快客戶業務辦理流程。
| | 四層負載均衡(layer 4) | 七層負載均衡(layer 7) |
+----------+-------------------------+--------------------------------------------------+
| 基於 | 基於IP+Port的 | 基於虛擬的URL或主機IP等。 |
+----------+-------------------------+--------------------------------------------------+
| 類似於 | 路由器 | 代理服務器 |
+----------+-------------------------+--------------------------------------------------+
| 握手次數 | 1 次 | 2 次 |
+----------+-------------------------+--------------------------------------------------+
| 復雜度 | 低 | 高 |
+----------+-------------------------+--------------------------------------------------+
| 性能 | 高;無需解析內容 | 中;需要算法識別 URL,Cookie 和 HTTP head 等信息 |
+----------+-------------------------+--------------------------------------------------+
| 安全性 | 低,無法識別 DDoS等攻擊 | 高, 可以防御SYN cookie以SYN flood等 |
+----------+-------------------------+--------------------------------------------------+
| 額外功能 | 無 | 會話保持,圖片壓縮,防盜鏈等 |
總結:從上面的對比看來四層負載與七層負載最大的區別就是效率與功能的區別。四層負載架構設計比較簡單,無需解析具體的消息內容,在網絡吞吐量及處理能力上會相對比較高,而七層負載均衡的優勢則體現在功能多,控制靈活強大。在具體業務架構設計時,使用七層負載或者四層負載還得根據具體的情況綜合考慮。
作者:二彬小青年
鏈接:https://www.jianshu.com/p/9826d866080a
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。