API網關之Kong網關簡介

1. Kong簡介

Kong是一款基於OpenResty(Nginx + Lua模塊)編寫的高可用、易擴展的,由Mashape公司開源的API Gateway項目。Kong是基於NGINX和Apache Cassandra或PostgreSQL構建的,能提供易於使用的RESTful API來操作和配置API管理系統,所以它可以水平擴展多個Kong服務器,通過前置的負載均衡配置把請求均勻地分發到各個Server,來應對大批量的網絡請求。

API網關應用架構

Kong主要有三個組件:

  1. Kong Server :基於nginx的服務器,用來接收API請求。

  2. Apache Cassandra/PostgreSQL :用來存儲操作數據。

  3. Kong dashboard:官方推薦UI管理工具,當然,也可以使用 restfull 方式 管理admin api。

Kong採用插件機制進行功能定製,插件集(可以是0或N個)在API請求響應循環的生命週期中被執行。插件使用Lua編寫,目前已有幾個基礎功能:HTTP基本認證、密鑰認證、CORS(Cross-Origin Resource Sharing,跨域資源共享)、TCP、UDP、文件日誌、API請求限流、請求轉發以及Nginx監控。

2. Kong網關的特性

Kong網關具有以下的特性:

  • 可擴展性: 通過簡單地添加更多的服務器,可以輕鬆地進行橫向擴展,這意味着您的平臺可以在一個較低負載的情況下處理任何請求;

  • 模塊化: 可以通過添加新的插件進行擴展,這些插件可以通過RESTful Admin API輕鬆配置;

  • 在任何基礎架構上運行: Kong網關可以在任何地方都能運行。您可以在雲或內部網絡環境中部署Kong,包括單個或多個數據中心設置,以及public,private 或invite-only APIs。

Kong網關架構

  1. Kong核心基於OpenResty構建,實現了請求/響應的Lua處理化;

  2. Kong插件攔截請求/響應,如果接觸過Java Servlet,等價於攔截器,實現請求/響應的AOP處理;

  3. Kong Restful 管理API提供了API/API消費者/插件的管理;

  4. 數據中心用於存儲Kong集羣節點信息、API、消費者、插件等信息,目前提供了PostgreSQL和Cassandra支持,如果需要高可用建議使用Cassandra;

  5. Kong集羣中的節點通過gossip協議自動發現其他節點,當通過一個Kong節點的管理API進行一些變更時也會通知其他節點。每個Kong節點的配置信息是會緩存的,如插件,那麼當在某一個Kong節點修改了插件配置時,需要通知其他節點配置的變更。

3. Kong網關插件

  1. 身份認證插件:Kong提供了Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication認證實現。

  2. 安全控制插件:ACL(訪問控制)、CORS(跨域資源共享)、動態SSL、IP限制、爬蟲檢測實現。

  3. 流量控制插件:請求限流(基於請求計數限流)、上游響應限流(根據upstream響應計數限流)、請求大小限制。限流支持本地、Redis和集羣限流模式。

  4. 分析監控插件:Galileo(記錄請求和響應數據,實現API分析)、Datadog(記錄API Metric如請求次數、請求大小、響應狀態和延遲,可視化API Metric)、Runscope(記錄請求和響應數據,實現API性能測試和監控)。

  5. 協議轉換插件:請求轉換(在轉發到upstream之前修改請求)、響應轉換(在upstream響應返回給客戶端之前修改響應)。

  6. 日誌應用插件:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly等。

4. Kong網關請求流程

爲了更好地理解系統,這是使用Kong網關的API接口的典型請求工作流程:

請求流程

當Kong運行時,每個對API的請求將先被Kong命中,然後這個請求將會被代理轉發到最終的API接口。在請求(Requests)和響應(Responses)之間,Kong將會執行已經事先安裝和配置好的任何插件,授權您的API訪問操作。Kong是每個API請求的入口點(Endpoint)。

5. 總結

Kong作爲API網關提供了API管理功能,及圍繞API管理實現了一些默認的插件,另外還具備集羣水平擴展能力,從而提升整體吞吐量。Kong本身是基於OpenResty,可以在現有Kong的基礎上進行一些擴展,從而實現更復雜的特性。

雖然有一些特性Kong默認是缺失的,如API級別的超時、重試、fallback策略、緩存、API聚合、AB測試等,這些功能插件需要企業開發人員通過Lua語言進行定製和擴展。

綜上所述,Kong API網關默認提供的插件比較豐富, 適應針對企業級的API網關定位。

以下是個人微信公衆號, 用於學習與交流, 歡迎大家關注。
運維前沿公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章