一、Zuul有什麼功能?
Zuul作爲路由網關組件,主要提供了以下功能:
- Zuul + Eureka + Ribbon,可以實現智能路由和負載均衡的功能,將請求按照某種策略分發到集羣狀態的多個服務實例中去
- 將所有服務的API接口統一聚合,並統一對外暴露,方便外部系統調用,也方便開發測試。外部系統不需要了解微服務系統中的調用鏈路,也屏蔽了微服務系統的內部API接口
- 可以集成身份認證和權限認證
- 實現監控功能,實時日誌輸出,記錄請求信息
- 實現流量監控,可以用來控制服務的降級
不過在Spring Cloud中,現在Zuul基本已經被Spring Cloud推出的新一代網關框架-服務網關Gateway代替了。
二、Zuul的工作原理
Zuul是通過Servlet來實現的,可以通過自定義的ZuulServlet來對請求進行控制,類似SpringMVC的DispatchServlet。
Zuul的過濾器包括以下四種:
- PRE過濾器:最早執行,在請求路由到具體的微服務實例之前,可以做安全校驗等
- ROUTING過濾器:將請求路由到具體的微服務實例,默認情況下使用Http Client進行網絡請求
- POST過濾器:請求已經被路由到微服務實例並執行完成之後執行,可以用於收集統計信息,指標,以及將響應返回到客戶端
- ERROR過濾器:其他過濾器發生錯誤時執行
流程如下圖所示:
Zuul也可以通過配合Ribbon和Hystrix實現負載均衡和熔斷器的效果。
三、Zuul集羣常見架構
- 通過不同的渠道使用不同的Zuul來進行路由,比如架設三個Zuul網關示例的集羣,移動端用一個,Web端用一個,其他客戶端用一個。同理可以給流量較大的外部系統單獨提供一個Zuul網關實例。
- 通過Nginx和Zuul結合,Nginx暴露在最外層,通過Nginx將請求負載均衡轉發到Zuul集羣上