天天看點

Nginx專欄—負載均衡的實作類型

搭建了負載均衡技術的伺服器是大量的并發通路或資料流量的入口,它的任務就是将這些流量分擔到多台節點裝置上分别處理,進而增加吞吐量,減少系統響應時間。除了并發請求,負載均衡伺服器還可以将單個複雜任務配置設定轉發給後端多個節點處理,處理完再彙總傳回給使用者。

總而言之,負載均衡是一種網絡技術,目的是:

  1. 優化資源使用
  2. 最大化吞吐量
  3. 最小化響應時間
  4. 避免任何單個資源的過載

基于OSI七層網絡模型來分類的負載均衡

二層負載均衡 (Layer 2 Load Balancing)

一般是用虛拟mac位址方式,負載均衡伺服器接收後會修改網卡的MAC位址,改為後端實際的MAC位址響應

三層負載均衡 (Layer 3 Load Balancing)

用虛拟IP位址的方式,使用者端對虛拟的IP位址送出請求,負載均衡伺服器會拿到 TCP/IP 的資料包,對資料包的 IP 位址進行轉換,修改成真實的後端IP位址,然後把資料包重新發送出去。

四層負載均衡 (Layer 4 Load Balancing)

四層負載均衡在三層負載的基礎上,加上了第四層的端口号,使用了IP + Port的方式來決定哪些流量需要做負載均衡,并記錄下這個TCP或者UDP的流量是由哪台伺服器處理的,後續這個連接配接的所有流量都同樣轉發到同一台伺服器處理。

七層負載均衡 (Layer 7 Load Balancing)

七層的負載均衡是基于虛拟URL或主機IP的負載均衡。它在進階應用層上執行,會處理每個消息的實際内容。對比四層負載均衡,七層的負載均衡性能稍微差一點,因為它需要算法識别URL,cookie和HTTP head等資訊。但是它的安全性卻更高,它可以識别DDos攻擊等其他一些惡意攻擊,可以添加一些額外功能像是會話保持,圖檔壓縮等等。

一般來說多個層級的負載均衡都是需要的,越往上功能越豐富,越底層的負載均衡越簡單。因為主機和主機的通信是通過IP和端口進行的,是以軟體層面上所能實作的負載均衡隻能是4,7層。作為一名軟體工程師,能接觸到的其實也就隻有四層和七層負載。

除了2347層模型,通過 DNS 實作負載均衡功能的場景也是非常常見的。

高可用的架構設計

當使用者發送DNS傳回的虛拟IP的時候,傳回的IP是下一層的負載均衡的虛拟IP,如下圖所示:

Nginx專欄—負載均衡的實作類型

使用四層的原因是因為四層相對七層抗負載能力更強,性能更高,對記憶體和CPU資源消耗比較低。

同時,因為不管是請求還是響應的資料包都要通過四層負載均衡伺服器進行 IP位址轉換,為了防止流量瓶頸或者單點故障(Single Point Failure),我們需要對裝置進行熱備,以叢集的模式存在。

當資料流量通過四層負載的分流政策配置設定到不同的下層負載,也就是七層負載上之後,會由七層負載針對http應用本身做配置設定和轉發,比如這裡的例子,根據不同的endpoint,配置設定請求到不同的下遊應用伺服器上。

這種架構設計可以扛得住千萬,甚至億級别的日通路量。如果是通路量比較小的應用,其實可以直接DNS + 七層負載就可以了。

若有收獲,就點個贊吧

繼續閱讀