新聞資訊

              首頁 -新聞資訊 -行業(yè)資訊 -常見Java網(wǎng)關(guān)實現(xiàn)方案對比

              常見Java網(wǎng)關(guān)實現(xiàn)方案對比

              發(fā)布時間:2024-01-11作者來源:優(yōu)智互聯(lián)瀏覽:793

              客戶端需要多次提出要求,要求不同域名對應(yīng)的服務(wù),增加了通信成本和維護客戶端代碼的復(fù)雜性。

              每一項服務(wù)都會單獨進行服務(wù)驗證,如果每一項服務(wù)驗證的邏輯不同,就會導(dǎo)致客戶端反復(fù)驗證。

              此外,如果每個服務(wù)都采用不同的協(xié)議,那么對客戶來說就是災(zāi)難性的。

              基于以上,我們需要一個中間層,讓客戶端要求中間層。至于需要請求的服務(wù),我們需要請求中間部分,最后把結(jié)果總結(jié)回客戶端。這個中間層是網(wǎng)關(guān)。

              為何使用網(wǎng)關(guān)?

              使用網(wǎng)關(guān)有幾個功能:

              統(tǒng)一鑒權(quán)

              一般來說,我們在網(wǎng)關(guān)上評估權(quán)利有兩種:1。它是對客戶端身份的認(rèn)證。2.訪問權(quán)限控制是在確認(rèn)用戶身份后,判斷是否有訪問某一資源的權(quán)限。曾經(jīng)我們在單個應(yīng)用中,客戶端要求驗證身份和對資源權(quán)限的約束相對簡單,相應(yīng)的用戶和權(quán)限信息可以通過要求的session獲得。但是在微服務(wù)架構(gòu)下,所有的服務(wù)都被拆分成單個微服務(wù),集群部署會變得復(fù)雜,因為如果我們?nèi)匀皇褂胹ession,我們將在每個分布式平臺上尋求相同的效果。

              日志記錄

              當(dāng)客戶端要求進入時,我們需要記錄當(dāng)前要求的時間依賴于來源、地址、ip等信息,這樣我們就可以在網(wǎng)關(guān)層面統(tǒng)一攔截獲取,然后通過ELK組件輸出到日志文件中,記錄內(nèi)容可以在不分別記錄的情況下,在多維度、多信息統(tǒng)一記錄。網(wǎng)關(guān)模塊方案

              要求分發(fā)和過濾

              對于網(wǎng)關(guān)來說,匹配和分發(fā)這個請求是最重要的功能。事實上,我們常見的nginx有一個請求轉(zhuǎn)發(fā)和過濾的功能。對于網(wǎng)關(guān)來說,請求可以前后過濾。

              請求分發(fā):接受客戶端的請求,將請求與后面的微服務(wù)相對應(yīng),并請求微服務(wù)。因為微服務(wù)的粒度比較細(xì),這個網(wǎng)關(guān)可以整合各種微服務(wù)的功能,最后還給客戶端。

              過濾器:網(wǎng)關(guān)將攔截所有請求,相當(dāng)于spring中AOP的一個橫截面,在此截面上進行鑒權(quán)、限流、認(rèn)證等操作。

              灰度發(fā)布

              一般來說,公司的互聯(lián)網(wǎng)產(chǎn)品迭代非常快,基本上是小步快跑。基本上每周發(fā)布一次版本迭代。在這種情況下,會出現(xiàn)兼容性、功能完整性、bug最終發(fā)生事故等風(fēng)險。一般來說,當(dāng)我們發(fā)布它時,我們會將新功能發(fā)布到指定的機器上,并劃分過去的一小部分流量來觀察具體情況。因此,這個功能可以通過網(wǎng)關(guān)作為請求的入口來完成。