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