簡明入門講義——一文理清負載均衡和反向代理

Source: refactoring.guru

負載均衡器

負載局衡器(Load Balance,下文簡稱 LB)更像是一個請求調(diào)度中心,主要是為了分發(fā)請求。這一角色使得它可以

  • 避免請求分配到不可用的服務(wù)器,例如發(fā)送心跳感知服務(wù)器在線情況
  • 避免服務(wù)器過載,例如實現(xiàn)一個簡單的請求計數(shù)器或者統(tǒng)計請求的響應(yīng)時間等。
  • 解決單點問題,實現(xiàn)水平擴展
  • 根據(jù)請求類型分配指定的服務(wù)器(例如靜態(tài)文件分配給 CDN、讀寫或冷熱分離等)

負載均衡器可以工作于兩層, L4 TCP 層或者 L7 應(yīng)用層。

L4 —— 傳輸控制協(xié)議層

工作于傳輸控制協(xié)議層意味著 LB 只獲取 TCP 表頭的基本信息:來源 IP、目的 IP 等,請求體的內(nèi)容對 LB 是透明的,也就是說 LB 看不到請求的內(nèi)容,只知道它從何處來要往何處去,帶了多重的“行李”。L4 層的 LB 可以實現(xiàn)簡單的輪詢、隨機、或者基于 IP 的地理位置請求分發(fā)。

L7 —— 應(yīng)用層

工作于應(yīng)用層,例如最常用的 HTTP 協(xié)議層,則可以根據(jù) HTTP 的方法、URL、版本、HTTP 頭部信息甚至是根據(jù)請求體的內(nèi)容,請求體都需要過 LB 這個安檢機器,LB 知道“行李”裝的是什么。當(dāng)然,它的行程和重量,LB 也一清二楚(即實際上 LB 同時工作于 L4 和 L7 層),工作于 L7 層相比于 L4 層會更損耗性能,但在今天這個性能過剩的時代,這點損耗是可以接受的。

有了這個能力,LB 可以:

  • 根據(jù)請求方法、類型分配指定的服務(wù)器
  • 根據(jù)會話信息分配給保存相應(yīng)會話的服務(wù)器,用戶就可以不必重新登錄
  • 充當(dāng) SSL 端點(Termination)LB 背后的服務(wù)器就不必每一個都去搭建相同的 SSL 環(huán)境了。

誒?等等,SSL 端點功能不是反向代理的嗎?

沒錯,反向代理的功能也被融入在負載均衡器中,這才使得有些人分不清二者的區(qū)別。

負載均衡器是為了分配請求、解決單點問題而生的,因此負載均衡器必須是兩個或以上才有意義。而反向代理一個服務(wù)器也可以。

反向代理

Source: refactoring.guru

反向代理有點類似設(shè)計模式的外觀模式(Facade Pattern),這個設(shè)計模式可以隱藏系統(tǒng)的復(fù)雜性,提供統(tǒng)一的接口。類似的,反向代理只需要向客戶端提供一個統(tǒng)一的地址。這樣設(shè)計的好處是:

  • 提高安全性 —— 統(tǒng)一的入口使得后端服務(wù)器的 IP 不會暴露在公網(wǎng)上,客戶端只需要與代理服務(wù)器打交道。DDoS 攻擊的處理、IP 黑名單等交由反向代理負責(zé),反向代理可以從源頭限制后端服務(wù)器可以接受的連接數(shù)量

  • 提高擴展性和靈活性—— 統(tǒng)一的入口使得后端架構(gòu)對客戶端是不可見的,你可以替換服務(wù)器來維護集群的健康、根據(jù)訪問量增刪服務(wù)器來實現(xiàn)彈性負載均衡。沒錯,這里的功能與 LB 相輔相成。

既然是代理,請求的整個過程對反向代理都是可見的,因此反向代理可以實現(xiàn):

  • 承擔(dān)請求的解壓縮,類似單一職責(zé)原則的設(shè)計,解壓和壓縮都由反向代理來實現(xiàn)。
  • SSL 端點,擴展服務(wù)器時就不需要搭建 SSL 服務(wù)了。
  • 請求返回的緩存,對于不需要專用 CDN 的網(wǎng)站,反向代理也實現(xiàn)了請求加速的功能。

總結(jié)

總結(jié)一下,負載均衡器更關(guān)心請求如何分發(fā),只有服務(wù)器不少于兩個才有意義。

反向代理提供請求的統(tǒng)一入口,也可以控制請求的返回。只有一臺服務(wù)器也可以實現(xiàn)它的功能

參考文檔

  1. 外觀模式 - Wikipedia
  2. TCP - Wikipedia
  3. Http 消息 - Mozilla
  4. What Is Layer 4 Load Balancing? - NGINX
  5. What is a Reverse Proxy vs. Load Balancer? - NGINX

公號:程序員的碎碎念

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容