為什么需要網(wǎng)關(guān)呢?
創(chuàng)新互聯(lián)專注于嘉峪關(guān)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供嘉峪關(guān)營(yíng)銷型網(wǎng)站建設(shè),嘉峪關(guān)網(wǎng)站制作、嘉峪關(guān)網(wǎng)頁設(shè)計(jì)、嘉峪關(guān)網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造嘉峪關(guān)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供嘉峪關(guān)網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。我們知道我們要進(jìn)入一個(gè)服務(wù)本身,很明顯我們沒有特別好的辦法,直接輸入IP地址+端口號(hào),我們知道這樣的做法很糟糕的,這樣的做法大有問題,首先暴露了我們實(shí)體機(jī)器的IP地址,別人一看你的IP地址就知道服務(wù)部署在哪里,讓別人很方便的進(jìn)行攻擊操作。
第二,我們這么多服務(wù),我們是不是要挨個(gè)調(diào)用它呀,我們這里假設(shè)做了個(gè)權(quán)限認(rèn)證,我們每一個(gè)客戶訪問的都是跑在不同機(jī)器上的不同的JVM上的服務(wù)程序,我們每一個(gè)服務(wù)都需要一個(gè)服務(wù)認(rèn)證,這樣做煩不煩呀,明顯是很煩的。
那么我們這時(shí)候面臨著這兩個(gè)及其總要的問題,這時(shí)我們就需要一個(gè)辦法解決它們。首先,我們看IP地址的暴露和IP地址寫死后帶來的單點(diǎn)問題,我是不是對(duì)這么服務(wù)本身我也要?jiǎng)討B(tài)的維護(hù)它服務(wù)的列表呀,我需要調(diào)用這服務(wù)本身,是不是也要一個(gè)負(fù)載均衡一樣的玩意,
還有關(guān)于IP地址暴露的玩意,我是不是需要做一個(gè)代理呀,像Nginx的反向代理一樣的東西,還有這玩意上部署公共的模塊,比如所有入口的權(quán)限校驗(yàn)的東西。因此我們現(xiàn)在需要Zuul API網(wǎng)關(guān)。它就解決了上面的問題,你想調(diào)用某個(gè)服務(wù),它會(huì)給你映射,把你服務(wù)的IP地址映射成
某個(gè)路徑,你輸入該路徑,它匹配到了,它就去替你訪問這個(gè)服務(wù),它會(huì)有個(gè)請(qǐng)求轉(zhuǎn)發(fā)的過程,像Nginx一樣,服務(wù)機(jī)器的實(shí)例具體實(shí)力,它不會(huì)直接去訪問IP,它會(huì)去Eureka注冊(cè)中心拿到服務(wù)的實(shí)例ID,即服務(wù)的名字。我再次使用客戶端的負(fù)載均衡ribbon訪問其中服務(wù)實(shí)例中的一臺(tái)。
API網(wǎng)關(guān)主要為了服務(wù)本身對(duì)外的調(diào)用該怎么調(diào)用來解決的,還有解決權(quán)限校驗(yàn)的問題,你可以在這里整合調(diào)用一系列過濾器的,例如整合shiro,springsecurity之類的東西。
Zuul可以通過加載動(dòng)態(tài)過濾機(jī)制,從而實(shí)現(xiàn)以下各項(xiàng)功能:
1.驗(yàn)證與安全保障: 識(shí)別面向各類資源的驗(yàn)證要求并拒絕那些與要求不符的請(qǐng)求。
2.審查與監(jiān)控: 在邊緣位置追蹤有意義數(shù)據(jù)及統(tǒng)計(jì)結(jié)果,從而為我們帶來準(zhǔn)確的生產(chǎn)狀態(tài)結(jié)論。
3.動(dòng)態(tài)路由: 以動(dòng)態(tài)方式根據(jù)需要將請(qǐng)求路由至不同后端集群處。
4.壓力測(cè)試: 逐漸增加指向集群的負(fù)載流量,從而計(jì)算性能水平。
5.負(fù)載分配: 為每一種負(fù)載類型分配對(duì)應(yīng)容量,并棄用超出限定值的請(qǐng)求。
6.靜態(tài)響應(yīng)處理: 在邊緣位置直接建立部分響應(yīng),從而避免其流入內(nèi)部集群。
7.多區(qū)域彈性: 跨越AWS區(qū)域進(jìn)行請(qǐng)求路由,旨在實(shí)現(xiàn)ELB使用多樣化并保證邊緣位置與使用者盡可能接近。
接著下來進(jìn)行實(shí)戰(zhàn)小Demo
第一步,在原來的工程下,新建一個(gè)Zuul模塊,引入依賴,代碼如下:
org.springframework.cloud spring-cloud-starter-eureka 1.3.5.RELEASE org.springframework.cloud spring-cloud-starter-zuul 1.3.5.RELEASE