
負(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ù)器也可以。
反向代理

反向代理有點(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)它的功能。
參考文檔
- 外觀模式 - Wikipedia
- TCP - Wikipedia
- Http 消息 - Mozilla
- What Is Layer 4 Load Balancing? - NGINX
- What is a Reverse Proxy vs. Load Balancer? - NGINX
公號(hào):程序員的碎碎念