API Gateway vs Load Balancer:選擇適合你的網絡流量管理組件

原文:https://www.apiseven.com/blog/api-gateway-vs-load-balancer

由於互聯網技術的發展,網絡數據的請求數節節攀升,這使得服務器承受的壓力越來越大。在早期的系統架構中,通常使用負載均衡來將網絡流量平攤到多個服務器中,以此減輕單臺服務器的壓力。

但是現如今,後端服務的種類在不斷地變多,每個種類的後端都以 API 的形式對外暴露,這使得 API 的數量也在不斷變多。以傳統的 負載均衡爲主的系統架構的侷限性就變得明顯起來,因爲它主要工作在四層,在七層上功能較弱,於是一款主要工作在七層且具有豐富擴展能力的基礎設施便應運而生,它就是 API 網關。

一、什麼是負載均衡(Load Balancer)

負載均衡的主要作用是爲多個後端服務提供負載均衡功能,依據不同的負載均衡算法讓這些服務可以分攤流量。負載均衡的歷史非常悠久,從演進路徑上看大致可以分爲以下這幾個階段:

負載均衡除了用於分攤流量、提高網絡的伸縮性外,還可以用於提升網絡安全。比如可以將內網服務器與外網進行隔離,防止互聯網的惡意攻擊和訪問。一個簡單的使用場景就是,一個包含敏感信息的內部服務器,負載均衡可以把內部服務器隔離在內網中,這樣就能有效保護內部服務器的安全。

二、什麼是 API 網關(Gateway)

目前市面上有許多 API 網關,比如 Apache APISIX、Kong、Tyk、Zuul 等,開發者可以根據自己的需求選擇合適的 API 網關。

三、API 網關與負載均衡主要區別

首先,他們主要工作的側重點不同。雖然說 API 網關和負載均衡都支持四層和七層的代理。但是,API 網關主要側重於七層,而負載均衡主要側重於四層。

工作在四層的負載均衡擁有許多有利的特點,首先是它相比於 API 網關減少了協議解析的損耗,具有更強的吞吐能力。其次就是它支持透傳客戶端 IP 地址,而 API 網關,一般是通過 HTTP 頭方式傳遞客戶端 IP 地址。

其次就是功能的豐富程度不同。負載均衡的 HTTP 七層處理能力比較弱,往往不包含認證、授權、鑑權、複雜路由邏輯、日誌收集等功能。API 網關則具有相當強大的七層協議處理能力,可以在此基礎上,附加各種各樣的功能擴展,比如權限控制、日誌、API 管理、Serverless 等等。

現如今,科技公司的產品需求變幻莫測,對於很多公司來說支持自定義開發是剛需。API 網關支持各式的自定義開發,比如支持豐富的編程語言,支持在流量轉發的不同階段注入自定義的處理邏輯,而負載均衡基本不支持任何自定義功能開發。

還有一點就是負載均衡通常採用流量直接分發的形式做負載均衡,它通過算法將流量數據直接發向某個後端服務器節點。這意味着後端等待接收流量的每一個服務實例行爲都必須是一致的,這減少了一定的靈活性。

而 API 網關則是以 URL Path 、Domain、Header 等維度進行流量分發,後端等待接收流量的服務實例可以多種多樣,可以是某個 Private API,也可以是某個 gRPC 的 API。這就使流量分發變得十分地靈活。

四、使用場景

微服務場景

API 網關對於採用了微服務架構的系統是剛需。首先它可以方便地管理和路由多種不同的後端服務,其次可以提供許多高級功能,比如身份驗證、授權、限流、轉發、日誌記錄等功能。這樣不同的微服務之間無需重複實現限流、認證等功能,讓微服務的每個服務的功能實現更加純粹,減少研發成本。

由於微服務的特點是服務種類多,工作在四層的負載均衡不太適合對種類繁多後端服務做負載均衡,它更適合用於單體後端服務。即使是工作在七層的負載均衡,因爲一般不能提供較爲豐富的高級功能,相比於 API 網關在微服務上優勢也不明顯。

API 管理與發佈

在需要對大量的 API 進行管理和發佈的場景,API 網關也非常適用,因爲它具有強大的 API 管理功能,可以讓你隨時隨地讓某個 API 上線或者下線,快速地修改 API 轉發的配置,快速地爲某個 API 添加限流、認證、日誌等等功能而無需重新啓動 API 網關。

以 Apache APISIX 爲例,Apache APISIX 是 Apache 基金會旗下的頂級開源項目,也是當前最活躍的開源網關項目。作爲一個動態、實時、高性能的開源 API 網關,Apache APISIX 提供了負載均衡、動態上游、灰度發佈、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。

而傳統的負載均衡則在 API 管理上較爲弱勢,不具備如此豐富的高級功能。

高性能的網絡出入口

對於需要大流量、極高穩定性的網絡出入口的場景,工作在四層的負載均衡顯然更爲適用。它可以把網絡原始四層流量直接分發到各個後端服務中,不存在中間層多次解析應用層協議的影響,具有更強的吞吐能力。

而工作在七層的 API 網關作爲統一的入口,會由於需要解析協議,存在一定的吞吐量限制。即使是使用四層的 API 網關來做網絡出入口也不太有優勢,因爲這一層不是 API 網關的側重點,相比於負載均衡多年在這一層的技術累計,API 網關優勢也不明顯。

總結

總的來說,API 網關和負載均衡是分別用於解決不同層面問題的基礎設施。API 網關主要用於作爲後端的 API 接口代理,提供對外訪問不同種類 API 的一個單獨入口,並且可以提供獨立於後端服務的限流、認證、監控等功能;而負載均衡則主要用於四層流量分發,它可以將請求分攤到多臺後端服務器上,平衡後端的請求負載,以提高系統的整體可用性和容錯性。

在合理的架構設計下,一般都將 API 網關和負載均衡配合使用,使用負載均衡作爲整個系統的網絡出入口,將流量分發到多個 API 網關實例,然後每個 API 網關實例分別對請求進行路由、認證、鑑權等操作,這樣可以使得整個網絡更加穩健、可靠、可擴展。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/62c1KqA4s5Qj5Guc0L0esw