天天看點

一文掌握負載均衡器、反向代理與API 網關

作者:不秃頭程式員
一文掌握負載均衡器、反向代理與API 網關
導讀:本文為API網關,負載均衡裝置與反向代碼的比較和相關詳細介紹。

API 網關、反向代理伺服器和負載均衡器是現代軟體架構中的重要元件。它們均扮演着增強 Web 應用程式性能、安全性和可擴充性的相關核心角色。

一文掌握負載均衡器、反向代理與API 網關

然而,我們們對三者的概述有時候會出現模糊,是以有必要澄清這些服務的角色。

下面就開始。

現實生活中的類比

讓我們先舉 3 個例子,并逐一詳細解釋。

我們以一家非常繁忙火爆的餐廳為例,當我們進入餐廳時,我們會受到男主人的歡迎,女主人負責迎接客人并将他們平均地安排給服務員,以便後者為客人提供最好的體驗。

在這種情況下,男主人/女主人隻不過是負載均衡器。

如果你檢視辦公室的收發室,就會發現接待員負責處理包裹和信件。他們做很多工作,例如分類郵件、将郵件遞送給員工或部門、盤點郵寄用品、轉發誤寄的郵件以及簽署挂号信等。在這種情況下,他們所做的不僅僅是分類并将郵件遞送給員工(這裡可以假設為負載均衡),而接待員隻不過是反向代理。

如果你去圖書館,你會遇到圖書館管理者,他們做很多工作,比如幫助人們查找書籍和資源、驗證圖書館身份證、管理者工、回複查詢、確定沒有人借太多書等等。他們在上述情況下,比接待員所做的工作更多,在這種情況下,圖書館員是API Gateway。

上面的示例應該為大家提供了足夠的背景資訊,以了解這三者之間的差異。

簡而言之,反向代理和 API 網關都提供負載平衡功能以及其他功能。此外,API 網關是一種特定類型的反向代理,旨在管理 API。

我們将深入研究它們其中的每一個。

負載均衡器

在本節中,我們将了解什麼是負載均衡器、什麼是不同類型的負載均衡器以及各種負載均衡算法。

現代高流量網站面臨着處理來自大量使用者并發請求的挑戰。無論是提供文本、圖像、視訊還是應用程式資料,滿足這些需求都需要大幅提高處理能力,這通常是通過添加更多伺服器來實作的。

為了最大限度地提高所有伺服器的效率,傳入的請求需要在它們之間進行配置設定。這種在一組後端伺服器之間配置設定網絡流量的過程稱為負載平衡。

下圖展示了典型的負載均衡器環境。

一文掌握負載均衡器、反向代理與API 網關

負載均衡器是一個專用于負載均衡的軟體元件,它位于伺服器前面,通過接收和路由請求代表伺服器進行操作。負載均衡器有效地管理請求,確定快速提供服務。如果伺服器崩潰,負載均衡器會将流量重定向到其他活動伺服器。當新伺服器加入該組時,負載均衡器會自動開始将請求路由到它。

此外,負載均衡器可以配置為對注冊的後端伺服器執行健康檢查。這些運作狀況檢查充當驗證後端伺服器可用性的測試工作。

負載均衡器的類型

負載均衡器有不同類型,但以下是重要的類型:

  • 網絡負載均衡器/第 4 層 (L4) 負載均衡器 — 網絡負載均衡器在第 4 層運作,專門處理 TCP 流量。它在傳輸級别配置設定流量,根據 IP 位址和目标端口等網絡變量做出路由決策。該負載均衡器在引導流量時僅關注網絡層資訊。
  • 應用程式負載均衡器/第 7 層 (L7) 負載均衡器 — 應用程式負載均衡器在 OSI 模型的第 7 層運作,根據應用程式級别的參數配置設定負載。該負載均衡器始終確定使用最新的 SSL/TLS 密碼和協定,進而增強安全性并簡化應用程式。

負載均衡器算法

靜态算法

  • 循環——用戶端請求按順序發送到不同的服務執行個體。通常,服務需要無狀态性。
一文掌握負載均衡器、反向代理與API 網關
  • 粘性循環 — 循環算法的增強版本,來自用戶端的後續請求将轉到處理初始請求的同一服務執行個體。
一文掌握負載均衡器、反向代理與API 網關
  • 權重循環 — 管理者可以為每個服務配置設定權重,确定每個服務處理的請求比例。
一文掌握負載均衡器、反向代理與API 網關
  • 哈希 - 該算法将哈希函數應用于傳入請求的 IP 或 URL。請求路由到的執行個體取決于哈希函數的計算結果。
一文掌握負載均衡器、反向代理與API 網關

動态算法

  • 最少連接配接 — 新請求将定向到并發連接配接數最少的伺服器執行個體。
一文掌握負載均衡器、反向代理與API 網關
  • 最短響應時間——新請求會以最快的響應時間發送到服務執行個體。
一文掌握負載均衡器、反向代理與API 網關

負載均衡器的優點:

  • 在多個伺服器之間有效地配置設定用戶端請求或網絡負載。
  • 通過減輕特定伺服器上的負載來縮短響應時間。
  • 通過僅将請求定向到線上伺服器來確定高可用性和可靠性。
  • 通過根據網絡要求動态添加或删除伺服器來促進可擴充性。
  • 能夠及早檢測故障,進而在不影響其他資源的情況下進行有效管理。
  • 提供 SSL 終止,通過處理 SSL 流量解密來減少 Web 伺服器上的計算負載。
  • 通過額外的保護層增強安全性,保護系統免受分布式拒絕服務 (DDoS) 和其他類型的攻擊。

負載均衡器的缺點:

  • 如果設定不正确,就會成為單點故障。
  • 需要仔細配置和監控。

反向代理

反向代理充當用戶端和伺服器之間的中介。

當代理将請求轉發到相關伺服器時,用戶端僅與反向代理互動以到達後端伺服器。這種機制隐藏了内部網絡中各個伺服器的實作細節。如下圖所示的例子,反向代理位于源伺服器前面,并確定沒有用戶端直接與該源伺服器通信。

一文掌握負載均衡器、反向代理與API 網關

反向代理經常用于:

  • 通過負載平衡進行負載配置設定。
  • 緩存——對于重複的請求,它可以獨立響應,無論是部分還是全部。經常通路的内容存儲在代理緩存中,減少了從後端擷取資料的需要,并為用戶端提供更快的響應。
  • 安全措施——它提供了實施防病毒或資料包過濾器等控制系統的選項。這些系統位于網際網路和專用網絡之間,為後端提供額外的保護。
  • SSL 終止 — 可将其設定為解密傳入請求并加密傳出響應,進而釋放寶貴的後端資源。

反向代理在 OSI 模型的第 7 層(應用程式層)發揮作用,在 HTTP 級别管理請求和響應。這使他們能夠提供進階特性和功能。其中一項功能是 URL 重寫、簡化複雜的 URL 并增強 SEO。

反向代理的優點

通過實施反向代理,網站或服務可以維護其源伺服器 IP 位址的機密性。這增加了針對定向攻擊(例如 DDoS 攻擊)的一層保護,因為攻擊者隻能将其攻擊指向反向代理。反向代理更安全、資源更豐富,可以增強對網絡攻擊的防禦能力。其他好處包括緩存和 SSL 終止。

API網關

可以将API網關(API Gateway)視為反向代理的擴充版本。API網關不僅轉發請求,還向用戶端隐藏架構中的後端分區。它超越了簡單的請求轉發,可能參與編排或聚合。這簡化了用戶端代碼并減少了 API 請求/傳回次數。

此外,用戶端不與多個後端互動,而是僅與 API 網關通信。另一個值得注意的方面涉及協定轉換,其中 API 網關可以轉換協定(例如,XML 到 JSON、gRPC 到 JSON)以促進用戶端-伺服器內建。

API 網關是解決安全性、可靠性、可擴充性、可觀察性和可追溯性等各種基本功能的關鍵工具。

一文掌握負載均衡器、反向代理與API 網關

API網關的主要特點:

  • 請求路由——将傳入請求引導至相關服務。
  • API組合——将多個服務組合成一個統一的API。
  • 速率限制 - 管理使用者在定義的時間内可以向 API 發出的請求量。
  • 安全性——包含身份驗證和授權等功能。
  • 集中管理——提供一個統一的平台來管理我們生态系統内的各個方面。
  • 分析和監控——實作全面的分析和跟蹤功能。

API網關内部工作流程

在下圖中,藍色的塊是 HTTP 請求所經曆的步驟。黃色塊是 API Gateway 在處理 HTTP 請求時提供的其他功能。

一文掌握負載均衡器、反向代理與API 網關
  • 參數驗證 - API 網關檢查并驗證 HTTP 請求中的屬性。
  • 允許/拒絕清單 - API 網關評估允許/拒絕清單以進行請求驗證。
  • 身份驗證和授權 - API 網關通過身份提供商驗證并授予授權。
  • 速率限制 — 執行速率限制規則,超過限制的請求将被拒絕。
  • 動态路由和服務發現 - API 網關使用路徑比對将請求定向到相關後端服務。
  • 協定轉換——API網關将請求轉換為合适的協定并将其中繼到後端微服務。
  • 錯誤處理 - API 網關管理請求處理期間遇到的任何錯誤,以確定服務平穩降級。
  • 斷路 — API 網關結合了斷路等彈性模式來識别故障,防止互連服務過載并減輕級聯故障。
  • 日志記錄和監控——API 網關利用 ELK 堆棧 (Elastic-Logstash-Kibana) 等可觀察性工具,促進日志記錄、監控、跟蹤和調試。
  • 緩存 — API 網關可以選擇緩存重複請求的響應,進而增強整體響應能力。

三者之間的主要差別

  • API 網關專門負責 API 管理,負載均衡器配置設定網絡流量,反向代理確定安全請求轉發。
  • 雖然 API 網關和反向代理都可以管理請求路由,但它們的核心目标有所不同。
  • 負載均衡器主要在傳輸層運作,而 API 網關和反向代理在應用層運作。

更多差異如下圖所示。

一文掌握負載均衡器、反向代理與API 網關

總結

下面将三個産品主要特點做概念總結如下:

  • API網關

位于用戶端和一組後端服務之間。它通過接受所有應用程式程式設計接口 (API) 調用、聚合實作這些調用所需的不同服務并傳回正确的結果來執行反向代理的功能。

使用者身份驗證、速率限制和統計是 API 網關代表 API 服務系統負責的典型職責。此外,API網關還可以處理故障(斷路器)并進行日志和監控。

  • 負載均衡器

是一項在許多伺服器或資源之間配置設定傳入流量的服務。通常我們在後端有兩個或多個Web伺服器,它在它們之間配置設定網絡流量。其主要目的是優化利用資源。

更平等的任務配置設定和增加的容量可以增強系統的響應能力和可靠性。共有三種進階負載均衡器:基于硬體、基于雲和基于軟體。

  • 反向代理伺服器

駐留在後端伺服器前面,并将用戶端請求傳輸到這些伺服器。反向代理通常用于提高安全性、速度和可靠性。

反向代理接收來自用戶端的請求,将其轉發到另一台伺服器,然後将其傳回給用戶端,給人的印象是第一個代理伺服器處理了該請求。

這些代理確定使用者不會直接通路源伺服器,進而使 Web 伺服器具有匿名性。它們通常用于負載平衡,我們需要處理傳入的流量,以便我們可以在多個後端伺服器之間配置設定該流量或使用它們進行緩存。

三者主要差別在于,API 網關專注于将請求路由到适當的服務并處理 API 請求,而負載均衡器專注于在一組伺服器之間,均勻配置設定請求并處理發送的請求到單個 IP 位址,該位址在協定或套接字級别(TCP、HTTP)工作。

産品執行個體

API 網關的一些産品執行個體有:

  • 亞馬遜 API 網關(https://aws.amazon.com/api-gateway/)
  • Ocelot(https://github.com/ThreeMammals/Ocelot)
  • Tyk(https://tyk.io/)
  • Apache APISIX(https://apisix.apache.org/)

負載均衡器:

  • Azure 負載均衡器(https://learn.microsoft.com/en-us/azure/load-balancer/load-balancer-overview)
  • HAProxy(https://github.com/ThreeMammals/Ocelot)
  • Seesow(https://github.com/google/seesaw)

反向代理服務的示例是:

  • Apache Proxy
  • (https://httpd.apache.org/docs/2.4/mod/mod_proxy.html)
  • Yarp(https://microsoft.github.io/reverse-proxy/)
  • Ngnix(https://www.nginx.com/)
  • 帶有附加子產品的IIS (URL Rewrite)。

什麼場合用哪個?

  • 負載均衡器擅長配置設定網絡流量,以增強可用性、可擴充性,甚至跨多個伺服器的負載配置設定,通常應用于 Web 應用程式和服務。
  • API 網關專注于微服務架構中 API 的管理、安全性和優化。它們的關鍵作用包括公開、保護和控制對 API 的通路。
  • 反向代理在安全性、性能優化和負載平衡方面都有應用。它們經常用于 Web 伺服器、緩存解決方案,并作為應用程式傳遞網絡的組成部分。

識别負載均衡器、反向代理和 API 網關的複雜環境似乎具有挑戰性,但有了正确的知識,我們現在就可以做出明智的決策并為自己 Web 應用選擇理想的元件。

負載均衡器在多個後端伺服器之間配置設定流量,反向代理提供額外的應用程式級功能,API 網關為基于微服務的應用程式提供集中管理和安全性。

此外,并非固定用法,我們可以随意探索這些元件的混合搭配方法,以獲得最佳效果。結合負載均衡器、反向代理和 API 網關可以建構一個不僅高效靈活而且安全且可擴充的 Web 架構。

希望大家利用這些元件的強大功能,釋放應用程式全部潛力!

參考:

https://newsletter.techworld-with-milan.com/p/api-gateway-vs-load-balancer-vs-reverse

繼續閱讀