發(fā)布時(shí)間:2024-01-11作者來(lái)源:優(yōu)智互聯(lián)瀏覽:676
客戶端需要多次提出要求,要求不同域名對(duì)應(yīng)的服務(wù),增加了通信成本和維護(hù)客戶端代碼的復(fù)雜性。
每一項(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ì)客戶來(lái)說(shuō)就是災(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)
一般來(lái)說(shuō),我們?cè)诰W(wǎng)關(guān)上評(píng)估權(quán)利有兩種:1。它是對(duì)客戶端身份的認(rèn)證。2.訪問(wèn)權(quán)限控制是在確認(rèn)用戶身份后,判斷是否有訪問(wèn)某一資源的權(quán)限。曾經(jīng)我們?cè)趩蝹€(gè)應(yīng)用中,客戶端要求驗(yàn)證身份和對(duì)資源權(quán)限的約束相對(duì)簡(jiǎn)單,相應(yīng)的用戶和權(quán)限信息可以通過(guò)要求的session獲得。但是在微服務(wù)架構(gòu)下,所有的服務(wù)都被拆分成單個(gè)微服務(wù),集群部署會(huì)變得復(fù)雜,因?yàn)槿绻覀內(nèi)匀皇褂胹ession,我們將在每個(gè)分布式平臺(tái)上尋求相同的效果。
日志記錄
當(dāng)客戶端要求進(jìn)入時(shí),我們需要記錄當(dāng)前要求的時(shí)間依賴于來(lái)源、地址、ip等信息,這樣我們就可以在網(wǎng)關(guān)層面統(tǒng)一攔截獲取,然后通過(guò)ELK組件輸出到日志文件中,記錄內(nèi)容可以在不分別記錄的情況下,在多維度、多信息統(tǒng)一記錄。網(wǎng)關(guān)模塊方案
要求分發(fā)和過(guò)濾
對(duì)于網(wǎng)關(guān)來(lái)說(shuō),匹配和分發(fā)這個(gè)請(qǐng)求是最重要的功能。事實(shí)上,我們常見(jiàn)的nginx有一個(gè)請(qǐng)求轉(zhuǎn)發(fā)和過(guò)濾的功能。對(duì)于網(wǎng)關(guān)來(lái)說(shuō),請(qǐng)求可以前后過(guò)濾。
請(qǐng)求分發(fā):接受客戶端的請(qǐng)求,將請(qǐng)求與后面的微服務(wù)相對(duì)應(yīng),并請(qǐng)求微服務(wù)。因?yàn)槲⒎?wù)的粒度比較細(xì),這個(gè)網(wǎng)關(guān)可以整合各種微服務(wù)的功能,最后還給客戶端。
過(guò)濾器:網(wǎng)關(guān)將攔截所有請(qǐng)求,相當(dāng)于spring中AOP的一個(gè)橫截面,在此截面上進(jìn)行鑒權(quán)、限流、認(rèn)證等操作。
灰度發(fā)布
一般來(lái)說(shuō),公司的互聯(lián)網(wǎng)產(chǎn)品迭代非??欤旧鲜切〔娇炫??;旧厦恐馨l(fā)布一次版本迭代。在這種情況下,會(huì)出現(xiàn)兼容性、功能完整性、bug最終發(fā)生事故等風(fēng)險(xiǎn)。一般來(lái)說(shuō),當(dāng)我們發(fā)布它時(shí),我們會(huì)將新功能發(fā)布到指定的機(jī)器上,并劃分過(guò)去的一小部分流量來(lái)觀察具體情況。因此,這個(gè)功能可以通過(guò)網(wǎng)關(guān)作為請(qǐng)求的入口來(lái)完成。