API網關學習及介紹

1、什麼是API網關

        

 

     API網關是一個服務器,是系統的後端統一入口。首先,它會提供最基本的路由服務,將調用轉發到上游服務。其次,做爲一個入口,它還能夠進行認證,鑑權,限流等操做,對上游服務保護。因此說,有了API網關,就能夠作到「一夫當關,萬夫莫開」git

    從技術設計的角度上來講,API是一種抽象,它隔離了咱們的使用以及實現;從開發管理的角度上來講,API是一種契約。github

    API網關是一種微服務的架構解決方案,服務於API「契約」精神,並儘量的擴大這種契約的影響力,構建一種圍繞API開發的「生態」。web

2、API網關特性

使用面向切面編程在完成一些功能時,可讓代碼的侵入性更小,實現更加優雅。而在微服務架構中,API網關能夠給整個微服務增長面向切面編程的能力。API網關特性以下:spring

  • 路由轉發
    以前說了「API網關」是內部微服務的對外惟一入口,因此外面所有的請求都會先發到這個「API網關」上,而後由「API網關」來根據不一樣的請求去路由到不一樣的微服務節點上。例如能夠 根據路徑 來轉發、也能夠 根據參數 來轉發。
    而且因爲內部微服務實例也會隨着業務調整不停的變動,增長或者刪除節點,「API網關」能夠與「服務註冊」模塊進行協同工做,保證將外部請求轉發到最合適的微服務實例上面去。
  • 負載均衡
    既然「API網關」是內部微服務的單一入口,因此「API網關」在收到外部請求以後,還能夠根據內部微服務每一個實例的負荷狀況進行動態的負載均衡調節。一旦內部的某個微服務實例負載很高,甚至是不能及時響應,則「API網關」就經過負載均衡策略減小或中止向這個實例轉發請求。當全部的內部微服務實例都處理不過來的時候,「API網關」還能夠採用限流或熔斷的形式阻止外部請求,以保障整個系統的可用性。
  • 安全認證
    「API網關」就像是微服務的大門守衛,每個請求進來以後,都必須先在「API網關」上進行身份驗證,身份驗證經過後才轉發給後面的服務,轉發的時候通常也會帶上身份信息。
    同時「API網關」也須要對每個請求進行安全性檢查,例如參數的安全性、傳輸的安全性等等。
  • 日誌記錄
    既然全部的請求都須要走「API網關」,那麼咱們就能夠在「API網關」上統一集中的記錄下這些行爲日誌。這些日誌既能夠做爲咱們後續事件查詢使用,也能夠做爲系統的性能監控使用。
  • 數據轉換
    由於「API網關」對外是面向多種不一樣的客戶端,不一樣的客戶端所傳輸的數據類型多是不同的。所以「API網關」還須要具有數據轉換的功能,將不一樣客戶端傳輸進來的數據轉換成同一種類型再轉發給內部微服務上,這樣,兼容了這些請求的多樣性,保證了微服務的靈活性。

 

3、經常使用API網關及其原理

1)Kong  

  

優勢:sql

  1. 可擴展性,Kong依賴一個數據庫來實現配置存儲,依賴 serf 來實現 instance 之間的通訊。任何一個節點修改了其餘節點會收到通知並從新reload配置。
  2. 模塊化,Kong 能夠方便地增長新的插件,而且插件能夠經過 Restful API 進行管理。

缺點:數據庫

        lua語言開發,某些功能是收費,維護成本高。編程

 

 

主要分析一下其源碼和原理:後端

  1. core目錄裏面是一些基礎框架代碼,包括hooks,事件,插件基礎
  2. plugins目錄包括全部kong自帶的插件,kong的插件擴展有一套本身的規範,按照規範來很是容易地就能擴展kong
  3. dao是數據庫抽象層,目前kong自帶支持數據庫postgresql和cassandra。
  4. tools爲一些工具函數,須要注意的是cache。由於全部配置(包括插件的配置)都會是用cache來緩存,爲了減小讀取數據庫次數。
  5. api Kong會提供一個系列接口來更新配置

 2)Netflix Zuul 

        Zuul1 是基於 Servlet 框架構建,如圖所示,採用的是阻塞和多線程方式,即一個線程處理一次鏈接請求,這種方式在內部延遲嚴重、設備故障較多狀況下會引發存活的鏈接增多和線程增長的狀況發生。api

  

   Zuul2 的巨大區別是它運行在異步和無阻塞框架上,每一個 CPU 核一個線程,處理全部的請求和響應,請求和響應的生命週期是經過事件和回調來處理的,這種方式減小了線程數量,所以開銷較小。又因爲數據被存儲在同一個 CPU 裏,能夠複用 CPU 級別的緩存,前面說起的延遲和重試風暴問題也經過隊列存儲鏈接數和事件數方式減輕了不少(較線程切換來講輕量級不少,天然消耗較小)緩存

 

缺點: 沒有動態化配置,不利於管理。

3)sc-gateway

  spring Cloud Gateway 是 Spring Cloud 的一個全新項目,基於webflux的,底層也是基於netty,該項目是基於 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術開發的網關,它旨在爲微服務架構提供一種簡單有效的統一的 API 路由管理方式。

  Spring Cloud Gateway 做爲 Spring Cloud 生態系統中的網關,目標是替代 Netflix Zuul,其不只提供統一的路由方式,而且基於 Filter 鏈的方式提供了網關基本的功能,例如:安全,監控/指標,和限流。

相關概念:

  • Route(路由):這是網關的基本構建塊。它由一個 ID,一個目標 URI,一組斷言和一組過濾器定義。若是斷言爲真,則路由匹配。
  • Predicate(斷言):這是一個 Java 8 的 Predicate。輸入類型是一個 ServerWebExchange。咱們可使用它來匹配來自 HTTP 請求的任何內容,例如 headers 或參數。
  • Filter(過濾器):這是org.springframework.cloud.gateway.filter.GatewayFilter的實例,咱們可使用它修改請求和響應。

工做流程:

 

 缺點:沒有動態化的配置,只是spring-cloud體系的,其餘的業務系統的接入、公用服務的實現、新上接口的添加、動態調整接口的限流速率等等不少問題都很棘手。

 

4、API網關優缺點

      使用API網關的最大優勢是,它封裝了應用程序的內部結構。客戶端只須要同網關交互,而沒必要調用特定的服務。API網關爲每一類客戶端提供了特定的API。這減小了客戶端與應用程序間的交互次數,還簡化了客戶端代碼。
     API網關也有一些不足,它增長了一個咱們必須開發、部署和維護的高可用組件。爲了暴露每一個微服務的端點,開發人員必須更新API網關。API網關的更新過程要儘量地簡單,這很重要。不然,爲了更新網關,開發人員將不得不排隊等待。因爲全部API請求都要通過網關,它很容易成爲系統的性能瓶頸。不過,雖然有這些不足,但對於大多數現實世界的應用程序而言,使用API網關是合理的。

 

 

參考:

https://zhuanlan.zhihu.com/p/63944586

https://zhuanlan.zhihu.com/p/32660126

API網關做用、方案及如何選擇 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

https://www.zhihu.com/question/309582197  

https://tech.youzan.com/gateway/

https://mp.weixin.qq.com/s/QqFNcZfHdFbY31rVrsLsEA

https://www.zybuluo.com/yishuailuo/note/844059?utm_source=tool.lu

http://blog.didispace.com/hzf-ms-apigateway-1/

http://blog.didispace.com/hzf-ms-apigateway-2/#lg=1&slide=1

API網關做用、方案及如何選擇 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

API網關做用、方案及如何選擇 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

API網關做用、方案及如何選擇 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

API網關做用、方案及如何選擇 - frankyan的文章 - 知乎 https://zhuanlan.zhihu.com/p/32660126

相關文章
相關標籤/搜索