文章目錄
- 負載均衡器
- L4 —— 傳輸控制協議層
- L7 —— 應用層
- 反向代理
- 總結
- 參考檔案
負載均衡器
負載局衡器(Load Balance,下文簡稱 LB)更像是一個請求調度中心,主要是為了分發請求,這一角色使得它可以
- 避免請求分配到不可用的服務器,例如發送心跳感知服務器在線情況
- 避免服務器過載,例如實作一個簡單的請求計數器或者統計請求的回應時間等,
- 解決單點問題,實作水平擴展
- 根據請求型別分配指定的服務器(例如靜態檔案分配給 CDN、讀寫或冷熱分離等)
負載均衡器可以作業于兩層, L4 TCP 層或者 L7 應用層,
L4 —— 傳輸控制協議層
作業于傳輸控制協議層意味著 LB 只獲取 TCP 表頭的基本資訊:來源 IP、目的 IP 等,請求體的內容對 LB 是透明的,也就是說 LB 看不到請求的內容,只知道它從何處來要往何處去,帶了多重的“行李”,L4 層的 LB 可以實作簡單的輪詢、隨機、或者基于 IP 的地理位置請求分發,
L7 —— 應用層
作業于應用層,例如最常用的 HTTP 協議層,則可以根據 HTTP 的方法、URL、版本、HTTP 頭部資訊甚至是根據請求體的內容,請求體都需要過 LB 這個安檢機器,LB 知道“行李”裝的是什么,當然,它的行程和重量,LB 也一清二楚(即實際上 LB 同時作業于 L4 和 L7 層),作業于 L7 層相比于 L4 層會更損耗性能,但在今天這個性能過剩的時代,這點損耗是可以接受的,
有了這個能力,LB 可以:
- 根據請求方法、型別分配指定的服務器
- 根據會話資訊分配給保存相應會話的服務器,用戶就可以不必重新登錄
- 充當 SSL 端點(Termination)LB 背后的服務器就不必每一個都去搭建相同的 SSL 環境了,
誒?等等,SSL 端點功能不是反向代理的嗎?
沒錯,反向代理的功能也被融入在負載均衡器中,這才使得有些人分不清二者的區別,
負載均衡器是為了分配請求、解決單點問題而生的,因此負載均衡器必須是兩個或以上才有意義,而反向代理一個服務器也可以,
反向代理

反向代理有點類似設計模式的外觀模式(Facade Pattern),這個設計模式可以隱藏系統的復雜性,提供統一的介面,類似的,反向代理只需要向客戶端提供一個統一的地址,這樣設計的好處是:
-
提高安全性 —— 統一的入口使得后端服務器的 IP 不會暴露在公網上,客戶端只需要與代理服務器打交道,DDoS 攻擊的處理、IP 黑名單等交由反向代理負責,反向代理可以從源頭限制后端服務器可以接受的連接數量
-
提高擴展性和靈活性—— 統一的入口使得后端架構對客戶端是不可見的,你可以替換服務器來維護集群的健康、根據訪問量增刪服務器來實作彈性負載均衡,沒錯,這里的功能與 LB 相輔相成,
既然是代理,請求的整個程序對反向代理都是可見的,因此反向代理可以實作:
- 承擔請求的解壓縮,類似單一職責原則的設計,解壓和壓縮都由反向代理來實作,
- SSL 端點,擴展服務器時就不需要搭建 SSL 服務了,
- 請求回傳的快取,對于不需要專用 CDN 的網站,反向代理也實作了請求加速的功能,
總結
總結一下,負載均衡器更關心請求如何分發,只有服務器不少于兩個才有意義,
反向代理提供請求的統一入口,也可以控制請求的回傳,只有一臺服務器也可以實作它的功能,
參考檔案
- 外觀模式 - Wikipedia
- TCP - Wikipedia
- Http 訊息 - Mozilla
- What Is Layer 4 Load Balancing? - NGINX
- What is a Reverse Proxy vs. Load Balancer? - NGINX
公號:程式員的碎碎念
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/287912.html
標籤:其他
下一篇:RabbitMQ架構
