那麼,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主要有三個組件:跨域
Kong Server :基於nginx的服務器,用來接收API請求。緩存
Apache Cassandra/PostgreSQL :用來存儲操做數據。安全
Kong dashboard:官方推薦UI管理工具,固然,也可使用 restfull 方式 管理admin api。服務器
Kong採用插件機制進行功能定製,插件集(能夠是0或N個)在API請求響應循環的生命週期中被執行。插件使用Lua編寫,目前已有幾個基礎功能:HTTP基本認證、密鑰認證、CORS(Cross-Origin Resource Sharing,跨域資源共享)、TCP、UDP、文件日誌、API請求限流、請求轉發以及Nginx監控。restful
Kong網關具備如下的特性:網絡
可擴展性: 經過簡單地添加更多的服務器,能夠輕鬆地進行橫向擴展,這意味着您的平臺能夠在一個較低負載的狀況下處理任何請求;架構
模塊化: 能夠經過添加新的插件進行擴展,這些插件能夠經過RESTful Admin API輕鬆配置;負載均衡
在任何基礎架構上運行: Kong網關能夠在任何地方都能運行。您能夠在雲或內部網絡環境中部署Kong,包括單個或多個數據中心設置,以及public,private 或invite-only APIs。
Kong核心基於OpenResty構建,實現了請求/響應的Lua處理化;
Kong插件攔截請求/響應,若是接觸過Java Servlet,等價於攔截器,實現請求/響應的AOP處理;
Kong Restful 管理API提供了API/API消費者/插件的管理;
數據中心用於存儲Kong集羣節點信息、API、消費者、插件等信息,目前提供了PostgreSQL和Cassandra支持,若是須要高可用建議使用Cassandra;
Kong集羣中的節點經過gossip協議自動發現其餘節點,當經過一個Kong節點的管理API進行一些變動時也會通知其餘節點。每一個Kong節點的配置信息是會緩存的,如插件,那麼當在某一個Kong節點修改了插件配置時,須要通知其餘節點配置的變動。
身份認證插件:Kong提供了Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication認證明現。
安全控制插件:ACL(訪問控制)、CORS(跨域資源共享)、動態SSL、IP限制、爬蟲檢測實現。
流量控制插件:請求限流(基於請求計數限流)、上游響應限流(根據upstream響應計數限流)、請求大小限制。限流支持本地、Redis和集羣限流模式。
分析監控插件:Galileo(記錄請求和響應數據,實現API分析)、Datadog(記錄API Metric如請求次數、請求大小、響應狀態和延遲,可視化API Metric)、Runscope(記錄請求和響應數據,實現API性能測試和監控)。
協議轉換插件:請求轉換(在轉發到upstream以前修改請求)、響應轉換(在upstream響應返回給客戶端以前修改響應)。
日誌應用插件:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly等。
爲了更好地理解系統,這是使用Kong網關的API接口的典型請求工做流程:
當Kong運行時,每一個對API的請求將先被Kong命中,而後這個請求將會被代理轉發到最終的API接口。在請求(Requests)和響應(Responses)之間,Kong將會執行已經事先安裝和配置好的任何插件,受權您的API訪問操做。Kong是每一個API請求的入口點(Endpoint)。
API 網關能夠經過實現一些中間件來解決一些問題,這些中間件的功能你就不用再到每一個service中實現了。你也是知道的,不一樣的團隊使用不一樣的方式來實現了不一樣的微服務。
若是你不去作一些中心化和抽象化的事情,你將會死於不一樣的認證方式以及不一樣的速率限制實現,五花八門。你確定但願避免這樣的糟糕局面。
API網關不只能夠幫你解決API的管理部分,並且還能夠解決下面兩件事情:
Kong做爲API網關提供了API管理功能,及圍繞API管理實現了一些默認的插件,另外還具有集羣水平擴展能力,從而提高總體吞吐量。Kong自己是基於OpenResty,能夠在現有Kong的基礎上進行一些擴展,從而實現更復雜的特性。
雖然有一些特性Kong默認是缺失的,如API級別的超時、重試、fallback策略、緩存、API聚合、AB測試等,這些功能插件須要企業開發人員經過Lua語言進行定製和擴展。
綜上所述,Kong API網關默認提供的插件比較豐富, 適應針對企業級的API網關定位。