1. 程式人生 > >API閘道器之Kong閘道器簡介

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閘道器定位。

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