發(fā)布時(shí)間:2023-10-19作者來源:優(yōu)智互聯(lián)瀏覽:820
服務(wù)網(wǎng)關(guān)是什么?
在前面的文章中,我們已經(jīng)了解了構(gòu)建微服務(wù)的基本springboot,同時(shí)也可以使用springboot來構(gòu)建服務(wù)。下一步,我們將基于springboot來談?wù)剆pringcloud。這款springcloud并非一項(xiàng)特殊的技術(shù),它指的是微服務(wù)中的生態(tài)系統(tǒng)。例如網(wǎng)關(guān)、注冊(cè)中心、配置中心等。今日我們先來了解一下微服務(wù)網(wǎng)關(guān),微服務(wù)網(wǎng)關(guān)有很多種,這次我們用springcloudgateway來解釋一下。在微服務(wù)系統(tǒng)中,每個(gè)服務(wù)都是一個(gè)獨(dú)立的模塊,是一個(gè)獨(dú)立的組件。一個(gè)完整的微服務(wù)系統(tǒng)由幾個(gè)獨(dú)立的服務(wù)組成,每個(gè)服務(wù)都可以完成自己的商業(yè)模塊功能。例如,用戶服務(wù)提供與用戶信息相關(guān)的服務(wù)和功能,支付模塊提供支付相關(guān)的功能。各服務(wù)之間通過RESTAPI或RPC(后面說)進(jìn)行通信,而且一般我們的微服務(wù)都要做到無狀態(tài)通信。
客戶端需要多次提出要求,要求不同域名對(duì)應(yīng)的服務(wù),增加了通信成本和維護(hù)客戶端代碼的復(fù)雜性。網(wǎng)關(guān)模塊方案
每一項(xiàng)服務(wù)都會(huì)單獨(dú)進(jìn)行服務(wù)驗(yàn)證,如果每一項(xiàng)服務(wù)驗(yàn)證的邏輯不同,就會(huì)導(dǎo)致客戶端反復(fù)驗(yàn)證。
此外,如果每個(gè)服務(wù)都采用不同的協(xié)議,那么對(duì)客戶來說就是災(zāi)難性的。
基于以上,我們需要一個(gè)中間層,讓客戶端要求中間層。至于需要請(qǐng)求的服務(wù),我們需要請(qǐng)求中間部分,最后把結(jié)果總結(jié)回客戶端。這個(gè)中間層是網(wǎng)關(guān)。
為何使用網(wǎng)關(guān)?
使用網(wǎng)關(guān)有幾個(gè)功能:
統(tǒng)一鑒權(quán)
一般來說,我們?cè)诰W(wǎng)關(guān)上評(píng)估權(quán)利有兩種:1。它是對(duì)客戶端身份的認(rèn)證。2.訪問權(quán)限控制是指在確認(rèn)用戶身份后,判斷是否有訪問某一資源的權(quán)限。曾經(jīng)我們?cè)趩蝹€(gè)應(yīng)用中,客戶端要求驗(yàn)證身份和對(duì)資源權(quán)限的約束相對(duì)簡(jiǎn)單,相應(yīng)的用戶和權(quán)限信息可以通過要求的session獲得。但是在微服務(wù)架構(gòu)下,所有的服務(wù)都被拆分成單個(gè)微服務(wù),集群部署會(huì)變得復(fù)雜,因?yàn)槿绻覀內(nèi)匀皇褂胹ession,我們會(huì)要求每個(gè)分布式機(jī)器都沒有效果。
日志記錄
當(dāng)客戶端要求進(jìn)入時(shí),我們需要記錄當(dāng)前要求的時(shí)間依賴于來源、地址、ip等信息,這樣我們就可以在網(wǎng)關(guān)層面統(tǒng)一攔截獲取,然后通過ELK組件輸出到日志文件中,記錄內(nèi)容可以在不分別記錄的情況下,在多維度、多信息統(tǒng)一記錄。
要求分發(fā)和過濾
對(duì)于網(wǎng)關(guān)來說,匹配和分發(fā)這個(gè)請(qǐng)求是最重要的功能。事實(shí)上,我們常見的nginx有一個(gè)請(qǐng)求轉(zhuǎn)發(fā)和過濾的功能。對(duì)于網(wǎng)關(guān)來說,請(qǐng)求可以前后過濾。
請(qǐng)求分發(fā):接受客戶端的請(qǐng)求,將請(qǐng)求與后面的微服務(wù)相對(duì)應(yīng),并請(qǐng)求微服務(wù)。因?yàn)槲⒎?wù)的粒度比較細(xì),這個(gè)網(wǎng)關(guān)可以整合各種微服務(wù)的功能,最后還給客戶端。
過濾器:網(wǎng)關(guān)將攔截所有請(qǐng)求,相當(dāng)于spring中AOP的一個(gè)橫截面,在此截面上進(jìn)行鑒權(quán)、限流、認(rèn)證等操作。
灰度發(fā)布
一般來說,公司的互聯(lián)網(wǎng)產(chǎn)品迭代非???,基本上是小步快跑?;旧厦恐馨l(fā)布一次版本迭代。在這種情況下,會(huì)出現(xiàn)兼容性、功能完整性、bug最終發(fā)生事故等風(fēng)險(xiǎn)。一般來說,當(dāng)我們發(fā)布它時(shí),我們會(huì)將新功能發(fā)布到指定的機(jī)器上,并劃分過去的一小部分流量來觀察具體情況。因此,這個(gè)功能可以通過網(wǎng)關(guān)作為請(qǐng)求的入口來完成。