帶著問題閱讀
1、什麼是代理,代理有什麼好處
2、正向代理和負向代理有什麼區別
3、反向代理和負載均衡有什麼關係
4、四層負載均衡和七層有什麼區別
代理
代理,通俗來說好比是中介的角色,比如在生活中我們處理法律問題、房產交易都會請專業人士代為處理。從網路角度講,就是為事務參與雙方提供連線通道的第三方網路伺服器。
在網路場景中,根據被代理的角色和作用劃分,代理可分為正向代理和反向代理。
正向代理
正向代理是指對客戶端提供的代理服務,在客戶端無法直接訪問服務端的情況下,通過配置代理伺服器的方式訪問服務端。
在整個過程中,客戶端請求首先傳送到代理伺服器,代理伺服器再將請求傳送到服務端後將結果返回給客戶端。從服務端角度來看,認為代理伺服器才客戶端,因此正向代理即代理客戶端與服務端進行互動。比如生活中我們通過代購去購買海外商品,代購就是我們的正向代理。
正向代理通常有以下應用場景:
- 提供網路通道:解決客戶端由於防火牆或網路限制無法訪問服務端的問題,如訪問google等國外網站。
- 隱藏客戶端身份:服務端只感知代理伺服器,無法獲取真實客戶端,如黑客控制肉雞。
反向代理
反向代理是指對服務端提供的代理服務,通常出於安全考慮,真正的服務端只有內網網路,無法直接提供對外服務,為此需要設定反向代理伺服器,由代理伺服器接收外網請求,然後再轉發到內部伺服器。從客戶端角度看,代理伺服器是提供服務的服務端,因此反向代理即代理服務端與客戶端互動。比如租房遇到的二房東,我們籤合同也是與二房東簽訂,但實際提供住房的是房主。
反向代理通常有以下應用:
- 提供對外服務:代理伺服器暴露公網地址,接收請求並轉發到內網伺服器。
- 負載均衡:根據預設策略將請求分發到多臺伺服器。
- 提供安全保障:作為服務端防火牆,避免服務端遭受網路攻擊。
- 提高訪問速度:基於網路位置設定就近代理伺服器,提高資源獲取速度,如CDN伺服器。
區別
- 正向代理代理客戶端,服務端認為請求來自代理伺服器;反向代理代理服務端,客戶端認為提供服務的是代理伺服器。
- 正向代理通常由客戶端架設,與客戶端同處一個區域網;反向代理由服務端架設,與服務端同處一個區域網。
- 正向代理通常解決訪問限制的問題,反向代理通常解決對外服務和負載均衡的問題。
負載均衡
負載均衡介紹
負載均衡是將負載(工作任務,訪問請求)進行平衡、分攤到多個操作單元(伺服器,元件)上進行執行。是解決高效能,單點故障(高可用),擴充套件性(水平伸縮)的終極解決方案。
負載均衡既有基於軟體的實現方案,也有基於硬體的實現方案。在軟體方案中,又主要有:
-
基於DNS的負載均衡
在DNS伺服器中,可以為多個不同的地址配置相同的名字,最終查詢這個名字的客戶機將在解析這個名字時得到其中一個地址,所以這種代理方式是通過DNS服務中的隨機名字解析域名和IP來實現負載均衡。
-
反向代理負載均衡
通常的反向代理技術,支援為同一服務配置多個後端伺服器地址,以及設定相應的輪詢策略。請求到達反向代理伺服器後,代理通過既定的輪詢策略轉發請求到具體伺服器,實現負載均衡,如Nginx的七層配置形式。
-
基於NAT的負載均衡
該技術通過一個地址轉換閘道器將每個客戶端連線轉換為不同的內部伺服器地址,因此客戶端就各自與自己轉換得到的地址上的伺服器進行通訊,從而達到負載均衡的目的,如LVS和Nginx的四層配置形式。
網路模型和負載均衡
參照OSI標準網路模型定義,負載均衡有二、三、四、七層四種負載均衡方式,對應到TCP網路模型中,即資料鏈路層負載均衡、網路層負載均衡、傳輸層負載均衡及應用層負載均衡,實際應用中通常採用四層負載均衡和七層負載均衡。
-
四層負載均衡(IP+埠)
四層負載均衡是IP+埠的實現,以TCP協議為例,四層負載只需解析TCP報文頭部,按照負載均衡演算法選擇相應服務後端,將報文目的地址和埠修改為真實後端伺服器地址和埠,並轉發請求到對應後端伺服器。因此在四層負載情況下,負載均衡起到類似路由轉發的效果,TCP連線的建立是客戶端和服務端直接建立的。
四層負載常用軟體有:
- LVS(常用,穩定性最好)
- Nginx(需要額外編譯stream模組)
- HaProxy
-
七層負載均衡(應用層協議如HTTP)
七層負載也稱為內容交換,通常與具體應用層協議關聯,根據客戶端傳送請求內容選擇服務端進行負載轉發,如Nginx基於請求URL配置轉發。七層負載情況下,負載均衡與反向代理類似,客戶端和服務端分別與負載均衡器建立連線,因此效率要低於四層負載。
七層負載常用軟體有:
- HaProxy
- Nginx
- Apache(較少使用)
負載均衡和反向代理
負載均衡與反向代理是兩個概念,由於其網路架構形式類似(都用於接入服務端),帶來一定程度的混淆。
負載均衡的核心目標在於如何將請求均衡的分發到多個服務端;反向代理的核心目標在於隱藏服務端內部地址併為服務端提供外部訪問方式。出於高可靠機制的考慮,反向代理通常也會為同一服務註冊多個後端地址,因此如Nginx同時提供了反向代理和負載均衡的能力,這也是造成概念混淆的原因。
通常來講經過反向代理,真實服務端對客戶端不可見,代理即客戶端認為的服務端。相較負載均衡,七層負載的請求轉發與反向代理機制類似,而四層負載的NAT形式,是將報文目的地址修改為真實服務後端地址,與反向代理有根本區別。