【API網關】|?總結/Edison Zhou
最近在學習Kong網關,因此根據老習慣,我會將我的學習過程記錄下來,一來體系化整理,二來作為筆記供將來翻看。由于我司會直接使用Kong企業版,學習過程中我會使用Kong開源版。
什么是Kong?
Kong的原意為金剛,用來形容強健、力量、堅固和穩定,可以想想電影中的金剛,也不難看出Kong的Logo是一只金剛了。
Kong是一款基于Nginx Lua模塊寫的高可用,易擴展的開源API Gateway項目。由于Kong是基于Nginx的,所以可以水平擴展多個Kong服務器,通過前置的負載均衡配置把請求均勻地分發到各個Server,來應對大批量的網絡請求。
相對于純Nginx ,Kong具有以下優點:
(1)高性能:亞毫秒級處理延遲,可支持關鍵任務用例和高吞吐量。
(2)可擴展性:可插拔的體系結構,可通過Kong的Plugin SDK擴展 Kong。
(3)可移植性:Kong 可以部署在任何平臺、或者云。
NOTE:Kong作為一個優秀的云原生開源項目,目前已經加入了CNCF云原生計算基金會。
Kong要解決啥問題?
其實,Kong要解決的問題也是API網關需要解決的問題,如下圖所示:
在沒有引入網關之前,為了保障交互的安全,每個服務都需要自己實現一套權限校驗(Auth)、日志、限流、監控等方案。這樣就不太好,各種成本很高。
引入API網關之后呢,像鑒權、監控、安全、限流、日志、緩存等等方案都可以統一由網關實現。各個服務只需要專注于自己的業務實現就OK,可以幫助其實現敏捷開發,提升團隊的迭代效率。
常見的API網關有:OpenResty, Kong, APISIX, Spring Cloud Gateway, Ocelot 等。
Kong有哪些模塊?
Kong的具體模塊如下圖所示:
最下面的兩層是:Nginx和OpenResty,它的意思是:kong是一款基于OpenResty (Nginx + Lua) 編寫的高可用、易擴展的API Gateway。我們可以直接把Kong理解成是Nginx,但是Kong的功能不止于Nginx。
DataStore層:kong的配置文件可以支持化的存儲在NoSQL中,可選:cassandra、postgreSQL。
Plugin層:如果想拓展kong的功能,只需要提供對應的插件就行。有一些現成的插件可以直接用,可以自定義插件。
Restful層:它支持通過Restful API的方式來操作操作和配置Kong(管理nginx的配置文件)。而且kong有專屬的dashboard,支持在可視化的界面下和Restful API交互,實現對kong的可視化配置。
Kong的組成架構
Kong的具體組成部分如下圖所示:
Kong的流量處理
默認情況下,Kong Gateway在其配置的代理端口8000和8443上監聽流量。它評估傳入的客戶端API請求,并將其路由到適當的后端API。在路由請求和提供響應時,可以根據需要通過插件應用策略。
例如,在路由請求之前,可能需要客戶端進行身份驗證。這帶來了許多好處,包括:
(1)由于Kong Gateway正在處理身份驗證,因此該服務不需要自己的身份驗證邏輯。
(2)該服務僅接收有效請求,因此不會浪費周期來處理無效請求。
(3)記錄所有請求以集中查看流量。
下一篇,我們會通過Docker快速搭建一個Kong API Gateway環境來玩玩。
參考資料
閆觀濤,《Kong入門與實踐-基于Nginx和OpenRestry的云原生微服務網關》
風起云邊,《Kong - Overview》
風一樣的程序員,《45張圖帶你從0玩轉Kong Gateway》
年終總結:Edison的2021年終總結
數字化轉型:我在傳統企業做數字化轉型
C#刷題:C#刷劍指Offer算法題系列文章目錄
.NET面試:.NET開發面試知識體系
.NET大會:2020年中國.NET開發者大會PDF資料