天天看點

系統設計基礎知識(九)—負載均衡器

作者:喜歡編碼的社畜

系統設計基礎知識系列第九章負載均衡器。你可以閱讀我以前的文章

系統設計基礎知識(一) - 網絡

系統設計基礎知識(二)—資料庫

系統設計的基礎知識(三)吞吐量和延遲

系統設計基礎知識(四)—系統可用性

系統設計基礎知識(五)—緩存

系統設計基礎知識(六)—緩存區

系統設計基礎知識(七)—代理

系統設計基礎知識(八)了解IP位址和端口

什麼是負載均衡?

負載均衡:在一組資源上配置設定一組任務的過程。有兩種主要方法:靜态算法和動态算法。

負載均衡是一種叢集技術,利用基于網絡的硬體或軟體定義的裝置,在多台伺服器之間共享特定的服務(網絡服務、網絡流量等),進而提高業務處理能力,保證業務的高可靠性。

随着網際網路的發展,流量變得越來越大,也越來越複雜。業務邏輯也變得非常複雜。是以,需要多台伺服器來執行性能的橫向擴充并避免單點故障。

系統設計基礎知識(九)—負載均衡器

負載均衡的優勢

  1. 防止多使用者并發問題,提高應用處理性能(增加吞吐量,加強網絡處理能力)
  2. 提供故障轉移以實作高可用性
  3. 通過添加或減少伺服器數量來提供網站可擴充性
  4. 安全保護(做一些過濾、白名單、黑名單等)

負載均衡技術

為了滿足不同的應用需求,實作了許多不同的負載均衡技術。

  1. 軟體負載均衡
  • 在作業系統上安裝一個或多個附加軟體,例如 DNS、CheckPoint Firewall-1 ConnectControl、Keepalive + Ip Virtual Server (IPVS)、Linux Virtual Server (LVS)、Nginx和HAproxy。
  • LVS——它是一個基于傳輸層的負載均衡器。主要原理是對網絡資料包做一些修改,然後轉發給伺服器。端口檢測、URL檢測、自定義腳本檢測比較完善。具有抗負載能力強、性能高、穩定性高、可靠性高等特點。
  • Nginx——它是基于網絡層和應用層的負載均衡器。它通過反向代理的功能實作負載均衡的功能。端口檢測和URL檢測比較完善,但是檢測方式是被動的,會對使用者通路産生一定的影響。
  • HAproxy——它是基于 TCP 層和 HTTP 層的負載均衡器。它支援虛拟機、會話持久性、cookie 指導以及檢測伺服器的狀态以擷取指定的 URL。
  • 軟體負載均衡配置簡單、成本低、使用靈活,可以滿足基本需求。但效率不高。
  • 但是,在每台伺服器上安裝額外的軟體會消耗一定的系統資源。當連接配接請求非常大時,取決于系統,軟體的好壞決定了環境的性能,系統的安全,軟體的穩定性會影響整個環境的安全。

2. 硬體負載均衡

  • 直接在伺服器和外網之間安裝負載均衡裝置
  • 它獨立于作業系統,專門的裝置完成專門的負載均衡任務,進而使整體性能大大提高,再加上多樣化的負載均衡政策和智能流量管理。
  • 一些負載均衡器與交換裝置內建在一起,一些負載均衡器使用 2 個網絡擴充卡來連接配接這個負載均衡器。
  • 但是,它非常昂貴。

3.本地負載均衡

  • 它可以解決資料流量過大和網絡負載過重的問題。
  • 它具有靈活多樣的均衡政策,将資料流量配置設定到伺服器組中的共享伺服器上,避免伺服器單點故障造成的資料流量丢失。
  • 它是水準縮放。在不改變現有網絡結構的情況下,可以将新伺服器添加到服務組中。

4. 全局負載均衡

  • 它主要用于在多個區域擁有自己的伺服器的站點。
  • 全球使用者隻需一個 IP 位址或域名就可以通路最近的伺服器。
  • 站點分布廣泛的大公司使用Intranet來達到資源均勻合理分布的目的。

5. 網絡級别的負載均衡

DNS(DNS負載平衡)——通過為用戶端解析不同的IP位址

第 2 層(HTTP 負載平衡)— 基于 MAC 位址

第 3 層(IP 負載平衡)- 基于 IP 位址

第 4 層(反向代理負載平衡)——基于 IP + 端口

第 7 層(應用層負載平衡)——基于應用層資訊,例如 URL

DNS 負載平衡可以通過為用戶端解析不同的 IP 位址來配置設定流量。用戶端的流量可以直接到達每台伺服器。但是,缺點是延遲問題。排程政策改變後,各級DNS節點的緩存不會及時在用戶端生效。是以,DNS無法滿足業務需求,需要負載均衡。

系統設計基礎知識(九)—負載均衡器

第 2 層負載平衡可以在同一網絡上的機器之間配置設定流量。就是說伺服器綁定的是同一個虛拟IP(VIP),用戶端直接通過這個VIP請求。是以,為了區分同一IP下的不同伺服器,會使用一個MAC位址,因為每個用戶端都有不同的MAC位址。負載均衡伺服器收到請求後,重寫HTTP封包中以太網頭的MAC位址,按照一定的算法将請求轉發給目标。但是負載均衡伺服器隻負責請求的入口,不負責請求的響應。

系統設計基礎知識(九)—負載均衡器

第 3 層負載平衡可以使用 IPv4 和 IPv6 位址路由流量。意思是它根據不同的IP位址将請求轉發到不同的伺服器。它并不比二層負載均衡更有優勢,因為傳入和傳出的請求都必須經過負載均衡伺服器,這會對負載均衡伺服器造成損壞。

4層負載均衡通過虛拟IP+端口接收請求,然後分發給真實伺服器。它通過釋出帶有端口号的 IP 位址、對流量執行網絡位址轉換 (NAT) 處理并将流量轉發到伺服器來确定需要平衡哪些流量。然後,它記錄哪個伺服器處理 TCP 或 UDP 流量。此連接配接的所有後續流量都被轉發到同一台伺服器進行處理。是以,主要分析IP層和TCP/UDP層來實作負載均衡。這種負載均衡器不了解應用協定(如HTTP/FTP/MySQL等)

第 7 層負載平衡通過虛拟 URL 或主機名接收請求,然後将它們分發到真實伺服器。它根據第 4 層資訊或第 7 層資訊轉發流量。沒有第 4 層負載均衡,絕對不可能有第 7 層負載均衡。可以根據 URL、浏覽器類别和語言來确定正在轉發的流量。例如,Web 伺服器可以分為 2 組,中文使用者和英文使用者。然後,七層負載均衡可以在使用者通路您的域名時自動識别使用者語言并選擇相應的伺服器組。是以,它主要分析應用層資訊,例如HTTP協定URL或cookie資訊。這種負載均衡器可以了解Haproxy等應用協定和MySQL 代理。

  • 第 7 層負載均衡器的優勢在于讓整個網絡更加“智能”。例如,可以通過緩存技術将圖像請求轉發到特定的圖像伺服器。可以使用壓縮技術将文本請求轉發到特定的文本伺服器。此外,第7層負載均衡器可以修改用戶端的請求和伺服器的響應,以提高應用系統在網絡層的靈活性。例如,功能被部署,例如用戶端請求中的Header重寫,伺服器響應中的關鍵字過濾或内容插入。
  • 第 7 層負載均衡器可以提供一定程度的安全性。例如,它可以防止常見的SYN 洪水攻擊,這是一種拒絕服務攻擊形式,攻擊者在網絡中沒有最終連接配接的情況下快速啟動與伺服器的連接配接。比如會發送大量的SYN包,耗盡伺服器上的資源。它自然會終止對負載均衡裝置的這些SYN攻擊,不會影響伺服器的正常運作。此外,第 7 層負載均衡器可以在第 7 層設定各種政策來過濾特定的資料包,例如 SQL 注入和其他應用級特定攻擊方法,并且必須具有強大的抗DDoS能力,以進一步提高系統的整體安全性。
  • 七層負載均衡器主要針對HTTP協定的應用,是以它的适用範圍主要是針對很多網站或者内部資訊平台等基于浏覽器/伺服器開發的系統。
  • 第 4 層負載均衡器主要針對 TCP 應用,例如即時通訊(IM)、實時消息推送等套接字長連接配接系統。
  • 但是,第 7 層負載均衡器必然會導緻裝置配置複雜,負載均衡壓力增大,故障排查複雜。

負載均衡算法

系統設計基礎知識(九)—負載均衡器

負載均衡算法可以分為兩類:靜态負載均衡算法和動态負載均衡算法。

系統設計基礎知識(九)—負載均衡器

靜态負載平衡算法

  1. 循環法——每台伺服器同樣能夠處理相同數量的請求。所有請求都被排程以循環方式分發到不同的伺服器。
  2. 權重循環法——不同的伺服器可能有不同的配置和系統負載,是以它們的能力也不同。為配置較高且負載較低的伺服器配置設定較高的權重,以便它可以處理許多請求或其他情況。這種方法是按照權重将請求按順序分發給伺服器。
  3. 随機- 根據機率和統計理論,請求随機分布到每個伺服器。實際效果越來越接近平均分布。
  4. 權重随機法——根據伺服器的配置和系統的負載配置設定不同的權重。這種方法是根據權重随機将請求分發給伺服器,而不是按順序配置設定。
  5. 比率— 為每個伺服器配置設定一個權重值。根據比例将使用者請求配置設定給每個伺服器。當其中一台伺服器在第 2 層到第 7 層出現故障時,BIG-IP 應用傳遞服務将其從伺服器隊列中取出,直到恢複正常後才參與下一個使用者請求的配置設定。
  6. 優先級— 為伺服器組中的每個組定義優先級。使用者請求被配置設定給具有最高優先級的伺服器組。在同一組内,它可能使用循環或比率算法來配置設定使用者的請求。當優先級最高的伺服器組發生故障時,BIG-IP 應用傳遞服務将請求發送到優先級較低的伺服器組。
  7. Source IP Hash——它使用一種算法,擷取用戶端和伺服器的源和目标IP位址,通過基于IP位址的哈希函數計算一個值,并生成一個唯一的哈希鍵。是以,用戶端可以使用特定伺服器的密鑰。
  8. Key-Value Range Method——根據key的範圍加載。例如,前 1 億個密鑰将存儲在伺服器 A 上,從 1 億到 2 億個密鑰将存儲在伺服器 B 上。

動态負載平衡算法

  1. 最小連接配接數方法- 将新連接配接傳遞給那些連接配接處理最少的伺服器。動态選擇目前連接配接積壓最少的伺服器處理目前請求,進而提高伺服器的利用效率,将請求合理配置設定到各個伺服器。
  2. 更快的響應速度——根據請求的響應時間,動态調整各個節點的權重,為響應速度較快的服務節點配置設定更多的請求,為響應速度較慢的服務節點配置設定更少的請求.
  3. 觀察法——連接配接數和響應時間以這兩者的最佳平衡為基礎,作為選擇伺服器處理新請求的依據。
  4. 預測方法——BIG-IP利用收集到的伺服器目前性能名額進行預測分析,為相應使用者的請求選擇性能在淨時間内達到最佳性能的伺服器。
  5. 動态性能配置設定——BIG-IP 收集應用和應用伺服器的各種性能參數,并動态調整流量配置設定。
  6. 動态伺服器補給——當主伺服器數量因故障而減少時,動态地為主伺服器組補充備份伺服器
  7. 服務品質——根據不同的優先級或場景配置設定請求。
  8. 服務類型——将不同服務類型的請求分發到不同的伺服器。
  9. Rule - 為不同的請求設定指導規則
  10. Shortest Expected Delay — 它基于權重最小連接配接排程算法。
  11. Least Queue Scheduling——真實伺服器連接配接數等于0,直接配置設定。是以,它基于最少的真實伺服器連接配接數。

如果你發現我的任何文章有幫助或有用,麻煩點贊或者轉發。 謝謝!

繼續閱讀