0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

我們的微服務(wù)中為什么需要網(wǎng)關(guān)?

jf_78858299 ? 來源:江南一點(diǎn)雨 ? 作者:江南一點(diǎn)雨 ? 2023-05-04 17:38 ? 次閱讀

玩過微服務(wù)的小伙伴對(duì) Spring Cloud 中的的 Spring Cloud Gateway 多多少少都有一些了解,松哥之前既寫過相關(guān)的文章,也錄過相關(guān)的視頻跟小伙伴們介紹 Spring Cloud Gateway,不過在之前的介紹中,我可能更加側(cè)重于跟小伙伴們介紹 Spring Cloud Gateway 的用法,對(duì)于我們?cè)谖⒎?wù)中為什么要使用 Spring Cloud Gateway 可能沒有和大家仔細(xì)分析過,最近年前得空,我們來一起探討一下這個(gè)話題。

說起 Spring Cloud Gateway 的使用場(chǎng)景,我相信很多小伙伴都能夠脫口而出認(rèn)證二字,確實(shí),在網(wǎng)關(guān)中完成認(rèn)證操作,確實(shí)是 Gateway 的重要使用場(chǎng)景之一,然而并不是唯一的使用場(chǎng)景。在微服務(wù)中使用網(wǎng)關(guān)的好處可太多了,今天我們就來逐一分析一下。

1. 請(qǐng)求路由

首先,Gateway 的第一個(gè)重要特點(diǎn)就是對(duì)請(qǐng)求進(jìn)行路由,根據(jù)不同的請(qǐng)求頭、請(qǐng)求參數(shù)、請(qǐng)求路徑等,將請(qǐng)求路由到不同的服務(wù)上。

從這個(gè)角度來說,Spring Cloud Gateway 所扮演的角色與 Nginx 這一類的反向代理服務(wù)器類似,之前就有小伙伴問我,Spring Cloud Gateway 和 Nginx 有啥區(qū)別?能不能用 Nginx 代替 Spring Cloud Gateway?其實(shí),你要是單純的只看請(qǐng)求路由這一個(gè)功能,那么確實(shí)可以用 Nginx 代替 Spring Cloud Gateway,然而在實(shí)際開發(fā)中,我們 Spring Cloud Gateway 所承擔(dān)的責(zé)任可不僅僅是請(qǐng)求路由轉(zhuǎn)發(fā),還有其他方面的功能(后文有介紹),其他的功能用 Nginx 做起來就有一些吃力了。

如果用 Spring Cloud Gateway 做請(qǐng)求路由轉(zhuǎn)發(fā),我們可以畫一張簡(jiǎn)單的架構(gòu)圖,如下:

圖片

2. API 組合

網(wǎng)關(guān)的另一個(gè)作用就是可以實(shí)現(xiàn) API 的組合。當(dāng)然這個(gè)一般來說需要一些代碼開發(fā),單純的配置一般來說是無法實(shí)現(xiàn)需求的。

先來說說沒有網(wǎng)關(guān)的時(shí)候我們可能會(huì)存在什么情況。

以松哥最近在錄的 TienChin 項(xiàng)目視頻為例,我有一個(gè)活動(dòng)管理服務(wù),也就是健身房定期會(huì)做一些促銷活動(dòng),促銷活動(dòng)往往又分為線上或者線下,線上線下又繼續(xù)細(xì)分為不同的渠道,如小紅書推廣、抖音推廣、公眾號(hào)推廣、線下地推等等,所以,假設(shè)我現(xiàn)在要做一個(gè)修改活動(dòng)的功能,那么當(dāng)我選中一條記錄,點(diǎn)擊修改按鈕,此時(shí),客戶端至少要發(fā)送兩條請(qǐng)求:

  1. 首先根據(jù)我選中的記錄的 ID,去服務(wù)端查詢這條記錄當(dāng)前的值。
  2. 去查詢活動(dòng)渠道,因?yàn)榛顒?dòng)記錄中保存的是渠道 ID,我們得去查詢所有的渠道信息,然后根據(jù)渠道信息才能顯示出來具體的渠道。

畫一張簡(jiǎn)單的架構(gòu)圖,類似下面這樣:

圖片

如上圖所示,如果你是一個(gè)微服務(wù)項(xiàng)目,但是卻沒有網(wǎng)關(guān),那么前端用戶一個(gè)點(diǎn)擊事件你可能需要在后臺(tái)發(fā)出 N 多個(gè)操作。并且,這 N 多個(gè)操作還都屬于互聯(lián)網(wǎng)請(qǐng)求,小伙伴們知道,互聯(lián)網(wǎng)請(qǐng)求的一個(gè)特點(diǎn)就是低帶寬和高延遲,連著發(fā)送兩個(gè)甚至多個(gè)請(qǐng)求,用戶體驗(yàn)肯定不佳。

像這樣的場(chǎng)景,如果我們有網(wǎng)關(guān),就可以在網(wǎng)關(guān)中提供一個(gè)粗粒度的 API,這樣,前端只需要發(fā)送一個(gè)請(qǐng)求到網(wǎng)關(guān),然后又網(wǎng)關(guān)去發(fā)送多個(gè)請(qǐng)求,從不同的微服務(wù)上把數(shù)據(jù)拿回來再統(tǒng)一返回給前端。如下圖:

圖片

可能有小伙伴會(huì)說,你這個(gè)請(qǐng)求還是發(fā)送了兩次,不一定省時(shí)間。其實(shí)不然!網(wǎng)關(guān)往往和微服務(wù)處于同一個(gè)局域網(wǎng)之中,相比于互聯(lián)網(wǎng),局域網(wǎng)的通信延遲就要小很多了。

這是網(wǎng)關(guān)的第二個(gè)作用。

3. 協(xié)議切換

通過網(wǎng)關(guān)我們還能實(shí)現(xiàn)請(qǐng)求協(xié)議的切換。

一般來說我們暴露給外部的服務(wù)都是 RESTful API,但是,有時(shí)候考慮到服務(wù)內(nèi)部的執(zhí)行效率問題,我們可以在服務(wù)內(nèi)容實(shí)用其他更高效的協(xié)議,通過服務(wù)網(wǎng)關(guān)就可以實(shí)現(xiàn)這個(gè)切換。

當(dāng)然,這并不是必須的,只是說,當(dāng)我們?cè)谖⒎?wù)中使用了網(wǎng)關(guān)之后,如果想做請(qǐng)求協(xié)議的切換,就會(huì)比較容易實(shí)現(xiàn)。

4. 限流

微服務(wù)中的限流操作,一個(gè)比較好的限流位置就是網(wǎng)關(guān)了,我們可以利用 Alibaba 的 Sentinel 結(jié)合 Spring Cloud Gateway 就可以非常方便的實(shí)現(xiàn)限流操作。

5. 請(qǐng)求分析

如果我們需要統(tǒng)計(jì)某一個(gè)請(qǐng)求的細(xì)節(jié),如執(zhí)行時(shí)間、參數(shù)等信息,那么這個(gè)操作也可以在網(wǎng)關(guān)上來做,在網(wǎng)關(guān)上對(duì)請(qǐng)求進(jìn)行詳細(xì)分析。

6. 緩存

對(duì)于一些不經(jīng)常變化的數(shù)據(jù),我們可以設(shè)置緩存時(shí)間,在網(wǎng)關(guān)上直接進(jìn)行檢查,如果緩存還沒失效,直接響應(yīng) 304,讓從客戶端讀取即可。

7. 認(rèn)證

這個(gè)是大家比較熟悉的了。

一般來說,我們可能會(huì)有單獨(dú)的認(rèn)證服務(wù),當(dāng)認(rèn)證請(qǐng)求到達(dá)網(wǎng)關(guān)之后,網(wǎng)關(guān)將之轉(zhuǎn)發(fā)到相應(yīng)的認(rèn)證服務(wù)上去完成認(rèn)證。對(duì)于非認(rèn)證請(qǐng)求,到達(dá)網(wǎng)關(guān)的時(shí)候需要校驗(yàn)這個(gè)請(qǐng)求是否有進(jìn)行認(rèn)證,這個(gè)校驗(yàn)就沒必要轉(zhuǎn)發(fā)了,可以直接在網(wǎng)關(guān)上進(jìn)行校驗(yàn)。

松哥舉個(gè)簡(jiǎn)單的例子,也是我自己之前在項(xiàng)目中的一個(gè)實(shí)踐經(jīng)驗(yàn),就是用戶登錄請(qǐng)求到達(dá)網(wǎng)關(guān)之后,網(wǎng)關(guān)將之轉(zhuǎn)發(fā)到專門的認(rèn)證服務(wù)上去(由于認(rèn)證的過程往往需要操作用戶數(shù)據(jù)庫,所以不要在網(wǎng)關(guān)上做認(rèn)證,轉(zhuǎn)發(fā)到專門的認(rèn)證服務(wù)上去做認(rèn)證操作),認(rèn)證成功之后,返回 JWT 字符串給前端。下一次,請(qǐng)求帶著 JWT 字符串來到網(wǎng)關(guān),可以直接在網(wǎng)關(guān)上校驗(yàn) JWT 字符串,這個(gè)校驗(yàn)本身比較容易,又不需要連接數(shù)據(jù)庫,所以可以在網(wǎng)關(guān)上完成,校驗(yàn)成功之后,將校驗(yàn)得到的用戶信息放到請(qǐng)求頭中,然后再轉(zhuǎn)發(fā)請(qǐng)求到不同的微服務(wù)上,這樣在各個(gè)微服務(wù)上,就知道請(qǐng)求的用戶到底是誰了。

8. 記錄請(qǐng)求日志

如果需要記錄請(qǐng)求日志,網(wǎng)關(guān)也是一個(gè)好地方。

網(wǎng)關(guān)能干這么多事,so,想要用 Nginx 代替 Spring Cloud Gateway 顯然不太現(xiàn)實(shí)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14362
  • 微服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    139

    瀏覽量

    7372
  • Cloud
    +關(guān)注

    關(guān)注

    0

    文章

    68

    瀏覽量

    5370
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    微服務(wù)架構(gòu)和CQRS架構(gòu)基本概念介紹

    微服務(wù)架構(gòu)現(xiàn)在很熱,到處可以看到各大互聯(lián)網(wǎng)公司的微服務(wù)實(shí)踐的分享總結(jié)。但是,我今天的分享和微服務(wù)沒有關(guān)系,希望可以帶給大家一些新的東西。如果一定要說微服務(wù)和CQRS架構(gòu)的關(guān)系,那我覺得
    發(fā)表于 05-22 09:03

    微服務(wù)網(wǎng)關(guān)gateway的相關(guān)資料推薦

    目錄微服務(wù)網(wǎng)關(guān) gateway 概述[路由器網(wǎng)關(guān) Zuul 概述]嵌入式 Zuul 反向代理微服務(wù)網(wǎng)關(guān) gateway 概述1、想象一下一個(gè)購物應(yīng)用程序的產(chǎn)品詳情頁面展示了指定商品的信息:2、若是
    發(fā)表于 12-23 08:19

    微服務(wù)優(yōu)勢(shì)_微服務(wù)架構(gòu)的好處與不足

    我們需要根據(jù)項(xiàng)目業(yè)務(wù)和團(tuán)隊(duì)情況來選擇合適的架構(gòu)。 構(gòu)建復(fù)雜的應(yīng)用真的是非常困難。單體式的架構(gòu)更適合輕量級(jí)的簡(jiǎn)單應(yīng)用。如果你用它來開發(fā)復(fù)雜應(yīng)用,那真的會(huì)很糟糕。微服務(wù)架構(gòu)模式可以用來構(gòu)建復(fù)雜應(yīng)用,當(dāng)然,這種架構(gòu)模型也有自己的缺點(diǎn)
    發(fā)表于 02-23 11:24 ?4402次閱讀

    什么是微服務(wù)和容器?微服務(wù)和容器的作用是什么

    微服務(wù)是將應(yīng)用程序拆分為多個(gè)服務(wù)的一種架構(gòu)類型,這些服務(wù)具備構(gòu)成整個(gè)應(yīng)用程序的細(xì)粒度功能。每個(gè)微服務(wù)將具備針對(duì)您的應(yīng)用程序的不同邏輯功能。與應(yīng)用程序的所有組件和功能都在單個(gè)實(shí)例
    的頭像 發(fā)表于 01-13 10:54 ?3.2w次閱讀
    什么是<b class='flag-5'>微服務(wù)</b>和容器?<b class='flag-5'>微服務(wù)</b>和容器的作用是什么

    什么是微服務(wù)架構(gòu)_微服務(wù)架構(gòu)的優(yōu)缺點(diǎn)及應(yīng)用

    什么是微服務(wù)架構(gòu) 簡(jiǎn)單地說,微服務(wù)是系統(tǒng)架構(gòu)上的一種設(shè)計(jì)風(fēng)格, 它的主旨是將一個(gè)原本獨(dú)立的系統(tǒng)拆分成多個(gè)小型服務(wù),這些小型服務(wù)都在各自獨(dú)立的進(jìn)程
    的頭像 發(fā)表于 06-02 10:03 ?1.7w次閱讀
    什么是<b class='flag-5'>微服務(wù)</b>架構(gòu)_<b class='flag-5'>微服務(wù)</b>架構(gòu)的優(yōu)缺點(diǎn)及應(yīng)用

    微服務(wù)架構(gòu)有哪些_微服務(wù)架構(gòu)設(shè)計(jì)模式

    小伙伴們知道常用的微服務(wù)架構(gòu)框架有哪些嗎?上回我們介紹了一些常用的微服務(wù)架構(gòu)設(shè)計(jì)模式,這次我們就來了解一下一些常用的微服務(wù)架構(gòu)框架吧。
    的頭像 發(fā)表于 05-17 17:06 ?2.9w次閱讀
    <b class='flag-5'>微服務(wù)</b>架構(gòu)有哪些_<b class='flag-5'>微服務(wù)</b>架構(gòu)設(shè)計(jì)模式

    使用FastAPI構(gòu)建機(jī)器學(xué)習(xí)微服務(wù)

    使用微服務(wù)架構(gòu)部署應(yīng)用程序有幾個(gè)優(yōu)點(diǎn):更容易進(jìn)行主系統(tǒng)集成、更簡(jiǎn)單的測(cè)試和可重用的代碼組件。 FastAPI 最近已成為 Python 中用于開發(fā)微服務(wù)的最流行的 web 框架之一。 FastAPI
    的頭像 發(fā)表于 10-10 16:44 ?2241次閱讀
    使用FastAPI構(gòu)建機(jī)器學(xué)習(xí)<b class='flag-5'>微服務(wù)</b>

    華為云服務(wù)治理?| 微服務(wù)常見故障模式

    ),微服務(wù)可觀測(cè)性能力(日志、監(jiān)控、告警等)構(gòu)建等。 華為云微服務(wù)治理專題主要探討運(yùn)行時(shí)治理。我們首先從常見的故障模式開始。 擴(kuò)容縮容 在擴(kuò)容場(chǎng)景下,新啟動(dòng)的微服務(wù)實(shí)例
    的頭像 發(fā)表于 01-18 17:44 ?787次閱讀

    微服務(wù)架構(gòu)服務(wù)之間如何互相調(diào)用呢?

    微服務(wù)架構(gòu),需要調(diào)用很多服務(wù)才能完成一項(xiàng)功能。服務(wù)之間如何互相調(diào)用就變成微服務(wù)架構(gòu)
    的頭像 發(fā)表于 01-31 09:46 ?2240次閱讀

    讓遠(yuǎn)程成為本地,微服務(wù)后端開發(fā)的福音

    如果我們想與其他微服務(wù)進(jìn)行聯(lián)動(dòng)調(diào)試,則需要在本地環(huán)境啟動(dòng)對(duì)應(yīng)的微服務(wù)模塊,這可能需要大量的配置
    的頭像 發(fā)表于 02-09 11:12 ?815次閱讀

    什么是微服務(wù)架構(gòu)?

    在Medium,我們的技術(shù)堆棧始于2012年的單片Node.js應(yīng)用程序。我們已經(jīng)構(gòu)建了幾個(gè)衛(wèi)星服務(wù),但我們還沒有制定一個(gè)系統(tǒng)地采用微服務(wù)
    的頭像 發(fā)表于 02-24 11:15 ?1363次閱讀
    什么是<b class='flag-5'>微服務(wù)</b>架構(gòu)?

    微服務(wù)為什么要用到API網(wǎng)關(guān)

    微服務(wù)架構(gòu)(通常簡(jiǎn)稱為微服務(wù))是指開發(fā)應(yīng)用所用的一種架構(gòu)形式。通過微服務(wù),可將大型應(yīng)用分解成多個(gè)獨(dú)立的組件,其中每個(gè)組件都有各自的責(zé)任領(lǐng)域。
    的頭像 發(fā)表于 04-14 09:17 ?772次閱讀

    基于Traefik自研的微服務(wù)網(wǎng)關(guān)

    數(shù)據(jù)平面主要功能是接入用戶的HTTP請(qǐng)求和微服務(wù)被拆分后的聚合。使用微服務(wù)網(wǎng)關(guān)統(tǒng)一對(duì)外暴露后端服務(wù)的API和契約,路由和過濾功能正是網(wǎng)關(guān)的核心能力模塊。另外,
    的頭像 發(fā)表于 04-16 11:08 ?2695次閱讀

    Spring Cloud :打造可擴(kuò)展的微服務(wù)網(wǎng)關(guān)

    Spring Cloud Gateway是一個(gè)基于Spring Framework 5和Project Reactor的反應(yīng)式編程模型的微服務(wù)網(wǎng)關(guān)。它提供了豐富的功能,包括動(dòng)態(tài)路由、請(qǐng)求限流、集成安全性等,使其成為構(gòu)建微服務(wù)架構(gòu)的理想選擇。
    的頭像 發(fā)表于 10-22 10:03 ?546次閱讀
    Spring Cloud :打造可擴(kuò)展的<b class='flag-5'>微服務(wù)網(wǎng)關(guān)</b>

    設(shè)計(jì)微服務(wù)架構(gòu)的原則

    微服務(wù)是一種軟件架構(gòu)策略,有利于改善整體性能和可擴(kuò)展性。你可能會(huì)想,我的團(tuán)隊(duì)需不需要采用微服務(wù),設(shè)計(jì)微服務(wù)架構(gòu)有哪些原則?本文會(huì)給你一些靈感。文章速覽:
    的頭像 發(fā)表于 11-26 08:05 ?615次閱讀
    設(shè)計(jì)<b class='flag-5'>微服務(wù)</b>架構(gòu)的原則