API網關之Kong網關簡介

1. Kong簡介

那麼,Kong是一個什麼東東呢?它是一個開源的API網關,或者你能夠認爲它是一個針對API的一個管理工具。你能夠在那些上游service之上,額外去實現一些功能。Kong是開源的,因此你能夠在Github找到它,你如今就能夠下載使用。nginx

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監控。restful

2. Kong網關的特性

Kong網關具備如下的特性:網絡

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

  • 模塊化: 能夠經過添加新的插件進行擴展,這些插件能夠經過RESTful Admin API輕鬆配置;負載均衡

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

 

  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)。

API網關和Kong能爲你作些什麼

API 網關能夠經過實現一些中間件來解決一些問題,這些中間件的功能你就不用再到每一個service中實現了。你也是知道的,不一樣的團隊使用不一樣的方式來實現了不一樣的微服務。

若是你不去作一些中心化和抽象化的事情,你將會死於不一樣的認證方式以及不一樣的速率限制實現,五花八門。你確定但願避免這樣的糟糕局面。

API網關不只能夠幫你解決API的管理部分,並且還能夠解決下面兩件事情:

  • 分析(Analytics) – API網關能夠和你的分析基礎設施保持透明的交互和通訊,由於API網關是每一個請求(request)的入口,必經地。API網關能夠看到全部的數據,能夠知道通過你的service的流量。這就至關於你有一個集中的地方,你能夠把全部的這些信息push到你的監控或分析工具,好比Kibana或者Splunk。
  • 自動化(Automation) –網關還有助於自動化部署,還能夠幫助你實現自動化登入驗證(on boarding)。 什麼是登入(on boarding)呢? 若是你有API,而且你但願有身份驗證,你可能須要一些功能能夠容許用戶爲該API建立登入憑據(credentials)而後開始使用(消費)API。 開發人員門戶網站或你的文檔中心等均可以與網關集成來配置這些憑據(credentials),這樣你就不用從頭開始構建一些功能了。

 

5. 總結

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

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

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

相關文章
相關標籤/搜索