APIGateway 即API網關,全部請求首先會通過這個網關,而後到達後端服務,有點相似於Facade模式。API網關做爲系統接口對外的統一出口,能夠減小調用方對服務實現的感知。nginx
沒有API網關時的結系統構以下圖:由圖能夠看出,在沒有API網關做爲統一出口的狀況下,須要調用方本身組合各類服務,並且容易讓調用方感知後端各類服務的存在。spring
加入API網關時的系統結構以下圖:由圖能夠看出,在加入了API網關以後,經過網關暴露接口給調用方,調用方能夠在不感知後端服務的狀況下調用服務,並且經過統一的接口,後端服務接口的變化不會影響調用方,後端服務變化能夠經過網關的轉換,對外仍然保持一致的風格。
後端
APIGateway的主要做用有:api
1.統一對外接口: 當用戶須要集成不一樣產品或者服務之間的功能,調用不一樣服務提供的能力。利用APIGateway可讓用戶在不感知服務邊緣的狀況下,利用統一的接口組裝服務。 對於公司內部不一樣的服務,提供的接口可能在風格上存在必定的差別,經過APIGateway能夠統一這種差別。 當內部服務修改時,能夠經過APIGateway進行適配,不須要調用方進行調整 減小對外暴露服務能夠增長系統安全性。安全
2.統一鑑權: 經過APIGateway對訪問進行統一鑑權,不須要每一個應用單獨對調用方進行鑑權,應用能夠專一業務。服務器
3.服務註冊與受權: 能夠控制調用方可使用和不可使用的服務。架構
4.服務限流: 經過APIGateway能夠對調用方調用每一個接口的每日調用及總調用次數限制負載均衡
5.全鏈路跟蹤: 經過APIGateway提供的惟一請求Id,監控調用流程,以及調用的響應時間。框架
現階段主要的開源API網關框架有:spring zuul 和kong測試
1. spring zuul
Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器。它的主要功能有:認證、壓力測試、金絲雀測試、動態路由、負載削減、安全、靜態響應處理和主動/主動交換管理。spring zuul 是spring Cloud的組件,能夠和spring cloud的各個組件結合使用。
springCloud的總體組建包括:Zuul、Ribbon、EureKa、Fein、Hystrix等。其中Zuul就是一個相似APIGateway的組建,Ribbon是相似於Nginx的代理服務器,Eureka用於註冊和發現服務,Hystrix能夠做爲整個架構的斷路服務,用於服務降級。Fein能夠做爲一個Rest服務的提供者,能夠供內部服務之間相互調用。
2. kong
Kong 是一個現成 的 api gateway 的解決方案,它在 nginx 上進行了開發。
api gateway 的實現方式有不少種,好比說 JVM 上能夠用基於NIO 的框架好比Netty,Vertx,Spring Reactor,JOSS Undertow。如今一個比較流程的沒有基於 JVM 的就是 NodeJs。其餘的還有 Nginx Plus。