網關相當于一個網絡服務架構的入口,所有網絡請求必須通過網關轉發到具體的服務。
統一管理微服務請求,權限控制、負載均衡、路由轉發、監控、安全控制黑名單和白名單等。
Zuul是對SpringCloud提供的成熟對的路由方案,他會根據請求的路徑不同,網關會定位到指定的微服務,并代理請求到不同的微服務接口,他對外隱蔽了微服務的真正接口地址。 三個重要概念:動態路由表,路由定位,反向代理。
1)動態路由表:Zuul支持Eureka路由,手動配置路由,這倆種都支持自動更新
2)路由定位:根據請求路徑,Zuul有自己的一套定位服務規則以及路由表達式匹配
3)反向代理:客戶端請求到路由網關,網關受理之后,在對目標發送請求,拿到響應之后在給客戶端,它可以和Eureka,Ribbon,Hystrix等組件配合使用。
對外暴露,權限校驗,服務聚合,日志審計等
網關是對所有服務的請求進行分析過濾,過濾器是對單個服務而言。
Nginx、Zuul、Gateway
Zuul是java語言實現的,主要為java服務提供網關服務,尤其在微服務架構中可以更加靈活的對網關進行操作。Nginx是使用C語言實現,性能高于Zuul,但是實現自定義操作需要熟悉lua語言,對程序員要求較高,可以使用Nginx做Zuul集群。
Zuul是SpringCloud集成的網關,使用Java語言編寫,可以對SpringCloud架構提供更靈活的服務。
考慮到API接口的分類可以將API接口分為開發API接口和內網API接口,內網API接口用于局域網,為內部服務器提供服務。開放API接口用于對外部合作單位提供接口調用,需要遵循Oauth2.0權限認證協議。同時還需要考慮安全性、冪等性等問題。
crun():過濾器的具體業務邏輯
shouldFilter():判斷過濾器是否有效
filterOrder():過濾器執行順序
filterType():過濾器攔截位置
通過path配置攔截請求,通過ServiceId到配置中心獲取轉發的服務列表,Zuul內部使用Ribbon實現本地負載均衡和轉發。
使用Nginx的upstream設置Zuul服務集群,通過location攔截請求并轉發到upstream,默認使用輪詢機制對Zuul集群發送請求。
SpringCloudGateway是SpringCloud官方推出的第二代網關框架,取代Zuul網關。網關作為流量的,在微服務系統中有著非常作用,網關常見的功能有路由轉發、權限校驗、限流控制等作用。使用了一個RouteLocatorBuilder的bean去創建路由,除了創建路RouteLocatorBuilder可以讓你添加各種predicates和filters,predicates斷言的意思,顧名思義就是根據具體的請求的規則,由具體的route去處理,filters是各種過濾器,用來對請求做各種判斷和修改。