當前位置: 妍妍網 > 碼農

面試官:你了解的閘道器有哪些?

2024-03-28碼農

引言:在微服務計畫中,閘道器是必不可少的一個部份,在 SpringCloud 全家桶中 SpringCloudGateWay 是重要組成部份,但只了解一種閘道器,或者說只實踐過一種閘道器,卻沒有把閘道器知識做一個整理,這是不健全的,這是技術選型的一部份,需要好好打造,本期文章就來 詳細介紹一下閘道器方面的知識。

題目

面試官:你了解的閘道器有哪些?詳細講講?

推薦解析

閘道器的作用是什麽?

1)路由轉發

2)負載均衡(Ribbon)

3)統一鑒權(許可權處理)

4)跨域處理(CORS)

5)統一業務處理(類似 AOP 抽取統一邏輯,緩存等等)

6)存取許可權控制(黑白名單)

7)釋出控制(灰度釋出)

8)流量染色(未經過閘道器的,不加特殊請求頭,在下遊服務直接拒絕)

9)介面保護(限流,資訊脫敏,降級(熔斷),超時時間,重試服務)

10)統一日誌

11)統一文件處理(結合 knife4j)

流量閘道器與服務閘道器的區別

流量閘道器(Nginx)提供是全域性的,和業務無關的策略,比如 HTTPS 證書,Web 防火墻,全域流量監控等等。

微服務閘道器(Spring Cloud GateWay) 是與業務息息相關的,提供業務級別的某種策略,許可權校驗,統一業務抽取等等,相對來說要跟細致針對某一業務。

常見的閘道器有哪些?

Spring Cloud Gateway

官網地址:https://spring.io/projects/spring-cloud-gateway/

為了替換掉 Zuul 1,因此產生了 SpringCloud GateWay,Spring Cloud GateWay 是基於 SpringWebFlux 的,使用 Reactor 庫實作響應式編程,基於 Netty 實作了 NIO。

Spring Cloud GateWay 的 RPS(每秒請求數)是 Zuul1 的 1.6 倍。

Zuul1 是基於 Servlet 的,阻塞 IO,不支持長連線,因此 WebSocket 這種直接就不支持,效能比較差。

Zuul2 是升級版,基於 Netty 非阻塞和支持長連線,但由於升天問題,沒有去讓 Spring Cloud 整合, Zuul 維護這塊也比較尷尬,因此一般都會直接選擇 SpringCloud GateWay。

OpenResty

官網地址:https://openresty.org/en/

OpenResty 基於 Nginx,采用 C 語言開發,因此學習成本比較高,總體來說需要用 C+Lua 指令碼才可以擴充套件閘道器的功能,自訂路由規則、過濾器等等。

Kong

官網地址:https://konghq.com/products/kong-gateway

基於 OpenResty(Nginx+Lua)的閘道器系統

重要元件

1)Kong Server:基於 Nginx 的伺服器。

2)Apache Cassandra:儲存數據

3)Kong DashBoard:UI 管理工具。

優勢:可以用 Go、Java Script、Python 等語言進行開發外掛程式。

APISIX

APISIX 是一個開源的雲原生微服務API閘道器,它由 Apache APISIX 社群維護和推動。作為一個高效能、可延伸、可插拔的閘道器,APISIX 提供了豐富的功能和靈活的配置選項,可以幫助開發人員在微服務架構中實作流量控制、存取控制、路由轉發、負載均衡、限流、熔斷、服務發現等功能。

1)高效能:APISIX 采用基於 Nginx 的架構,利用 Nginx 的高效能和高並行處理能力,能夠處理大規模的請求流量。

2)可延伸性:APISIX 支持動態載入外掛程式,使用者可以根據自己的需求選擇合適的外掛程式來擴充套件閘道器的功能,例如自訂認證、限流策略等。

3)高度靈活的配置:APISIX 提供了易於使用和理解的 YAML 配置檔格式,使得開發人員可以輕松配置和管理 API 閘道器的各種功能。

4)多種路由策略:APISIX 支持多種路由策略,包括基於路徑、網域名稱、請求頭、請求方法等的路由規則,可以根據不同的規則將請求轉發到不同的後端服務。

5)強大的外掛程式生態系:APISIX 擁有豐富的外掛程式生態系,包括認證外掛程式、限流外掛程式、熔斷外掛程式、日誌外掛程式等,可以根據具體需求選擇合適的外掛程式來增強閘道器的功能。

總結

Java 開發語言,肯定是首先 SpringCloud 全家桶的 Spring Cloud GateWay,生態良好,而且成熟穩定。效能相對穩定,但高效能還是選 Kong 之類的,但相對學習成本就高,需要有一個技術大牛去領導技術團隊。

APISIX 是用 etcd 做配置中心的(編程導航星球最新一期的手寫 RPC 教程中有教過)不存在單點問題。

APISIX 支持熱更新,Kong 不支持。

效能上, APISIX > Kong。

其他補充

魚聰明 AI 的回答:

魚聰明 AI 地址:https://www.yucongming.com/

閘道器(Gateway)是位於客戶端和後端服務之間的中間層,用於處理和轉發請求、提供安全性、控制存取、監控和管理流量等功能。它起到了連線客戶端和後端服務的橋梁作用,可以有效地管理和控制請求的流量,並提供一致的介面和安全性保障。

常見的具體閘道器有以下幾種,它們的優缺點和使用場景如下:

  1. Nginx:

  • 優點:高效能、高並行處理能力;支持反向代理、負載均衡、靜態檔服務等功能;靈活配置和易於擴充套件。

  • 缺點:不支持動態路由和動態配置;缺乏專門的API管理功能。

  • 使用場景:靜態檔服務、反向代理、負載均衡。

  • Kong:

  • 優點:基於Nginx構建,具有高效能和高可延伸性;支持外掛程式化開發,提供豐富的功能擴充套件;支持動態路由、流量控制、認證授權等功能。

  • 缺點:部份高級功能需要付費使用。

  • 使用場景:API管理、流量控制、認證授權。

  • APISIX:

  • 優點:基於Nginx構建,具有高效能和高可延伸性;支持外掛程式化開發,提供豐富的功能擴充套件;支持動態路由、流量控制、認證授權等功能。

  • 缺點:相對較新的計畫,社群生態相對較小。

  • 使用場景:API管理、流量控制、認證授權。

  • Spring Cloud Gateway:

  • 優點:基於Spring Cloud構建,與Spring生態緊密整合;支持動態路由、過濾器、負載均衡等功能;提供了視覺化的管理界面。

  • 缺點:相對較重量級,對於小型計畫可能過於復雜。

  • 使用場景:微服務架構、API管理、動態路由。

  • Istio:

  • 優點:基於Envoy構建,具有高效能和高可延伸性;提供了強大的流量管理、安全性和可觀察性功能;支持動態路由、負載均衡、熔斷等。

  • 缺點:相對復雜,對於小型計畫可能過於臃腫。

  • 使用場景:微服務架構、流量管理、安全性保護。

  • 根據具體需求和場景,選擇合適的閘道器非常重要。如果需要簡單的反向代理和負載均衡功能,Nginx 是一個不錯的選擇。如果需要更豐富的API管理和流量控制功能,Kong 和 APISIX 是比較適合的選項。而對於基於 Spring 生態或 Istio 的計畫,Spring Cloud Gateway 和 Istio 提供了更全面的功能和整合能力。

    歡迎交流

    在閱讀完本文後,你應該對閘道器的作用和常見的閘道器有了一定的了解,具體閘道器的實踐是需要深入打磨的,需要自己去參考官網文件進行手動的實踐,在文末我將提出三個問題,歡迎小夥伴在評論區進行回答!

    1)如何保證閘道器的高可用性和效能?

    2)在使用閘道器時,應該考慮哪些因素?

    3)閘道器如何處理大規模的流量和高並行請求?有哪些最佳化策略和技術可以套用?

    點燃求職熱情!每周持續更新,海量面試題等你挑戰!趕緊關註面試鴨公眾號,輕松備戰春招和暑期實習!


    往期推薦