簡(jiǎn)明入門講義——一文理清負(fù)載均衡和反向代理

Source: refactoring.guru

負(fù)載均衡器

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

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

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

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

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

L7 —— 應(yīng)用層

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

有了這個(gè)能力,LB 可以:

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

誒?等等,SSL 端點(diǎn)功能不是反向代理的嗎?

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

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

反向代理

Source: refactoring.guru

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

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

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

既然是代理,請(qǐng)求的整個(gè)過(guò)程對(duì)反向代理都是可見的,因此反向代理可以實(shí)現(xiàn):

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

總結(jié)

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

反向代理提供請(qǐng)求的統(tǒng)一入口,也可以控制請(qǐng)求的返回。只有一臺(tái)服務(wù)器也可以實(shí)現(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

公號(hào):程序員的碎碎念

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

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

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