在微服務架構中,API網關是核心的基礎服務之一。在微服務流行以前,API網關已經在不少架構中扮演重要的角色,尤爲是開放平臺,此時的API網關是系統的統一入口,肩負了不少的業務責任,好比限流,計費等功能。而在微服務架構中,API網關可能每每須要兼顧內部和外部的全部微服務,承擔更多的職責。編程
簡單說,API網關是微服務架構中的「指路人」與「守護者」。首先,它會提供最基本的路由服務,將調用轉發到上游服務。其次,做爲一個入口,它還能夠進行認證,鑑權,限流等操做,對上游服務保護。因此說,有了API網關,就能夠作到「一夫當關,萬夫莫開」。後端
在通常的電商系統中,API網關位於訂單服務和商品服務以前,全部外部的調用者(手機端和電腦Web端)都會先走網關,再進入具體的後端業務服務中。安全
大多數的Java工程師,都對Spring AOP有所瞭解,在實際的開發中,使用面向切面編程在完成一些功能時,可讓代碼的侵入性更小,實現更加優雅。而在微服務架構中,API網關能夠給整個微服務增長面向切面編程的能力。架構
在API網關上,能夠作到:負載均衡
在架構設計上,有了API網管也可讓整個架構更加靈活。不少業務系統,可能會涉及兩套API,一套給本身的系統使用,一套給第三方使用,此時,就可使用API網關進行分流。使用單獨的API網關服務於第三方調用者,同時也能夠針對第三方者作一些特殊的業務邏輯處理。微服務
因爲API網關在整個架構系統中位置特別重要,並且承受巨大的壓力。因此,高性能和高可用都須要考慮。比較經常使用的作法是在網關的前面,加上負載均衡,這樣,網關既能水平擴展,又能保證高可用。性能
結合開發中經常使用的微服務架構體系,再看API網關。插件
Kong是在客戶端和(微)服務間轉發API通訊的API網關,它的最底層是基於Ngnix,因此,有着與生俱來的性能優點。同時,Kong支持經過插件擴展其功能,自帶了不少經常使用的插件。架構設計
Kong也是一個比較通用的API網關,對於上游的服務沒有語言上的限制。因此,Kong的使用也很靈活,而且,功能上也很全面,如圖:設計
引用Kong的官方文檔
對於SpringCloud微服務架構體系來講,最經常使用的是Netflix Zuul。Zuul是基於Servlet的Filter實現的,而且本身內部也是構建了多種Filter的支持,從Zuul的架構圖,能夠看到這些Filter,以下:
引用Zuul官方架構圖
雖然,Zuul的性能不是那麼的突出,可是Zuul充分體現出簡單夠用的實用性原則。Zuul有不少優勢:
不久前,Netflix開源了Zuul2,最新的Zuul基於Netty實現,完全解決了飽受詬病的性能問題。
本文主要從概念上對微服務架構中的API網關進行分析講解,讓讀者從宏觀上去理解API網關。文中主要以常見的API網關爲例,簡單介紹其原理及優缺點。讀者能夠結合本身的實際開發經驗,理解API網關的概念和做用,從而更好地駕馭微服務。後續會繼續推出偏向實戰的微服務架構經驗,主要是基於SpringCloud體系進行講解,關注個人公衆號: