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