API網關是一個服務器,是系統的後端統一入口。首先,它會提供最基本的路由服務,將調用轉發到上游服務。其次,做爲一個入口,它還能夠進行認證,鑑權,限流等操做,對上游服務保護。因此說,有了API網關,就能夠作到「一夫當關,萬夫莫開」。git
從技術設計的角度上來講,API是一種抽象,它隔離了咱們的使用以及實現;從開發管理的角度上來講,API是一種契約。github
API網關是一種微服務的架構解決方案,服務於API「契約」精神,並儘量的擴大這種契約的影響力,構建一種圍繞API開發的「生態」。web
使用面向切面編程在完成一些功能時,可讓代碼的侵入性更小,實現更加優雅。而在微服務架構中,API網關能夠給整個微服務增長面向切面編程的能力。API網關特性以下:spring
優勢:sql
缺點:數據庫
lua語言開發,某些功能是收費,維護成本高。編程
主要分析一下其源碼和原理:後端
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 鏈的方式提供了網關基本的功能,例如:安全,監控/指標,和限流。
相關概念:
org.springframework.cloud.gateway.filter.GatewayFilter
的實例,咱們可使用它修改請求和響應。工做流程:
缺點:沒有動態化的配置,只是spring-cloud體系的,其餘的業務系統的接入、公用服務的實現、新上接口的添加、動態調整接口的限流速率等等不少問題都很棘手。
使用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