Spring Cloud Gateway

一、網(wǎng)關(guān)的使用場景

1.1)網(wǎng)關(guān)的作用——無網(wǎng)關(guān)

有些場景比如數(shù)倉整理了部分相關(guān)訂單詳情的一些推薦通過腳本寫在文件中憔狞,然后通過curl通知到商品服務(wù),需要商品服務(wù)提供一個(gè)接口(Controller)進(jìn)行某個(gè)固定路徑下的文件進(jìn)行下載——這個(gè)時(shí)候通過網(wǎng)關(guān)還需要一個(gè)用戶之類的就不好通過腳本發(fā)送Http請求解決

1.2)網(wǎng)關(guān)的作用——有網(wǎng)關(guān)

針對微服務(wù)大多數(shù)公司一個(gè)服務(wù)對應(yīng)一個(gè)團(tuán)隊(duì)四五個(gè)研發(fā)人員彰阴,多個(gè)團(tuán)隊(duì)提供多個(gè)錯(cuò)誤碼之后可能會出現(xiàn)不協(xié)調(diào)的情況瘾敢,通過網(wǎng)關(guān)可以綜合出一套統(tǒng)一的錯(cuò)誤碼,比如商品服務(wù)10000開頭尿这,庫存服務(wù)20000開頭

請求轉(zhuǎn)發(fā)相當(dāng)于我們翻墻簇抵,直接訪問油管會被墻擋住,那么我們將請求發(fā)送給代理(代理不被墻)射众,代理將請求轉(zhuǎn)發(fā)給目標(biāo)網(wǎng)站碟摆,目標(biāo)網(wǎng)站將內(nèi)容返回給代理,代理再將返回的內(nèi)容轉(zhuǎn)發(fā)給我

1.3)網(wǎng)關(guān)應(yīng)用——鑒權(quán)認(rèn)證

1.4)網(wǎng)關(guān)應(yīng)用——灰度發(fā)布

發(fā)布問題:新版本發(fā)布后關(guān)閉舊服務(wù)叨橱,比如注冊新帳號測試按照正常的注冊流程沒問題典蜕,等到上線后有一些用戶名中攜帶表情之類注冊断盛,在保存進(jìn)數(shù)據(jù)庫的時(shí)候報(bào)錯(cuò)。而舊服務(wù)是沒問題的用戶使用不順暢可能不用了愉舔,只要不是用戶必須再次使用概率極低

灰度發(fā)布:在大版本改動的時(shí)候?qū)⒘髁繖?quán)重比例逐步向新服務(wù)遷移的一種發(fā)布方式

藍(lán)綠發(fā)布

A/B Test

比如v1是游戲正式服钢猛,v2是游戲測試服——所謂的A/B代表的是不同的功能

金絲雀發(fā)布

二、網(wǎng)關(guān)技術(shù)選型

常見的網(wǎng)關(guān)實(shí)現(xiàn)方案

2.1)OpenResty

非常輕量級

初始化階段:init_by_lua可以通過腳本加載Nginx配置文件轩缤,想修改配置文件在此步開發(fā)命迈,init_worker_by_lua用來做健康檢查

Rewrite/Access階段:Request Start表示請求打進(jìn)來了,Secure request判斷是不是加密火的,是的話通過ssl_certificate_by_lua握手連接進(jìn)行認(rèn)證工作壶愤,Set_by_lua用來設(shè)置變量

2.2)Zuul

Routing Filters比如將請求8000/a轉(zhuǎn)發(fā)到7000/content

Pre Filters可以做限流、鑒權(quán)馏鹤,Post Filters可以做請求封裝征椒、統(tǒng)計(jì)铐炫,Error Filters可以做重試址芯、日志通知

2.3)Gateway

三、Gateway實(shí)戰(zhàn)

路徑匹配到之后跳過一個(gè)前綴也就是gateway鞠评,再將請求轉(zhuǎn)發(fā)到8080

gateway-service

gateway-sample

id為自定義
演示:PathRoutePredicateFactory——根據(jù)請求路徑匹配Predicate配置來進(jìn)行請求路由

四脱茉、Gateway架構(gòu)原理

4.1)Gateway的請求處理過程

4.2)RoutePredicateFactory

Http請求屬性中對應(yīng)的Predicate

演示1:BeforeRoutePredicateFactory——請求在指定日期之前

演示2:AfterRoutePredicateFactory——請求在指定日期之后

因?yàn)?088沒有路徑為/say的接口剪芥,而且時(shí)間不滿足在2025年1月1日之后沒有觸發(fā)轉(zhuǎn)發(fā)請求。所以報(bào)找不到

演示3:CookieRoutePredicateFactory——請求中攜帶的Cookie是否匹配配置的規(guī)則

演示4:HeaderRoutePredicateFactory——請求中Header頭消息對應(yīng)的name和value與Predicate配置的值是否匹配

演示5:HostRoutePredicateFactory——匹配請求中的Host字段進(jìn)行路由

演示6:MethodRoutePredicateFactory——根據(jù)HTTP請求的Method屬性來匹配以實(shí)現(xiàn)路由

4.3)RouteFilterFactory

Filter的類型和實(shí)現(xiàn)方式

演示1:AddRequestParameterGatewayFilterFactory——該過濾器的功能是對所有匹配的request請求中添加一個(gè)查詢參數(shù)

演示2: AddResponseHeaderGatewayFilterFactory——該過濾器會對所有匹配的請求琴许,在返回結(jié)果給客戶端之前税肪,在Header中添加相應(yīng)的數(shù)據(jù)

演示3:RequestRateLimiterGatewayFilterFactory——該過濾器會對訪問到當(dāng)前網(wǎng)關(guān)的所有請求執(zhí)行限流過濾

需要開啟本地Redis

演示4:RetryGatewayFilterFactory——請求重試過濾器,根據(jù)指定的觸發(fā)條件榜田,發(fā)起重試操作

演示5:GatewayMetricsFilter——網(wǎng)關(guān)指標(biāo)過濾器益兄,這個(gè)過濾器會添加name=gateway.requests的timer metrics

第一次請求什么也沒有
去掉gateway.requests就有內(nèi)容了
請求路徑匹配走通了
再次加上gateway.requests就能抓取請求的指標(biāo)

演示6:自定義過濾器(自定義Predicate也差不多)

GatewayFilter

GlobalFilter

全局不需要在配置文件中編寫任何項(xiàng),因?yàn)槿魏握埱蠖紩?jīng)過全局filters

五箭券、集成Nacos實(shí)現(xiàn)請求負(fù)載

gateway-nacos-provider

gateway-nacos-consumer也一樣

gateway-nacos-consumer

訪問consumer净捅,實(shí)際返回的是provider

六、集成Sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流

6.1)Route維度限流

快速多次請求

6.2)自定義API分組限流

aaa不限流
baz被限流
foo被限流

6.3)自定義異常

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辩块,一起剝皮案震驚了整個(gè)濱河市蛔六,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌废亭,老刑警劉巖国章,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異豆村,居然都是意外死亡液兽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門掌动,熙熙樓的掌柜王于貴愁眉苦臉地迎上來四啰,“玉大人宁玫,你說我怎么就攤上這事∧獯” “怎么了撬统?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長敦迄。 經(jīng)常有香客問我凭迹,道長,這世上最難降的妖魔是什么脾猛? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮鱼鸠,結(jié)果婚禮上蚀狰,老公的妹妹穿的比我還像新娘愉昆。我一直安慰自己,他們只是感情好麻蹋,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布扮授。 她就那樣靜靜地躺著,像睡著了一般堪侯。 火紅的嫁衣襯著肌膚如雪荔仁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天雹拄,我揣著相機(jī)與錄音滓玖,去河邊找鬼质蕉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛念祭,可吹牛的內(nèi)容都是我干的碍侦。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼站玄,長吁一口氣:“原來是場噩夢啊……” “哼株旷!你這毒婦竟也來了尔邓?” 一聲冷哼從身側(cè)響起梯嗽,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雕什,沒想到半個(gè)月后贷岸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磷雇,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唯笙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年崩掘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诵原。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绍赛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吗蚌,到底是詐尸還是另有隱情蚯妇,我是刑警寧澤箩言,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響畏吓,放射性物質(zhì)發(fā)生泄漏卫漫。R本人自食惡果不足惜列赎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一包吝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砖瞧,春花似錦块促、人聲如沸床未。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呀狼。三九已至损离,卻和暖如春僻澎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祖乳。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工眷昆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汁咏,地道東北人攘滩。 一個(gè)月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓漂问,卻偏偏與公主長得像蚤假,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子抡爹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 實(shí)現(xiàn)熔斷降級 在分布式系統(tǒng)中弦叶,網(wǎng)關(guān)作為流量的入口妇多,因此會有大量的請求進(jìn)入網(wǎng)關(guān)者祖,向其他服務(wù)發(fā)起調(diào)用,其他服務(wù)不可避免...
    小波同學(xué)閱讀 7,583評論 0 26
  • 一 API 網(wǎng)關(guān) API網(wǎng)關(guān)蜓耻,就是指系統(tǒng)統(tǒng)一入口刹淌,它用來封裝應(yīng)用程序的內(nèi)部結(jié)構(gòu)芦鳍,為客戶端提供統(tǒng)一服務(wù)葛账。一些與業(yè)務(wù)本...
    designer閱讀 723評論 0 0
  • 1籍琳、網(wǎng)關(guān)介紹 1趋急、為什么產(chǎn)生了網(wǎng)關(guān) 微服務(wù)架構(gòu)下势誊,隨著服務(wù)的數(shù)量不斷累加粟耻,當(dāng)客戶端訪問這些微服務(wù)的時(shí)候挤忙,往往需要記...
    我從不砍柴閱讀 7,116評論 0 4
  • 為什么要有服務(wù)網(wǎng)關(guān)? 我們都知道在微服務(wù)架構(gòu)中,系統(tǒng)會被拆分為很多個(gè)微服務(wù)戈泼。那么作為客戶端要如何去調(diào)用這么多的微服...
    匆匆歲月閱讀 2,849評論 0 13
  • 為什么要有服務(wù)網(wǎng)關(guān)? 我們都知道在微服務(wù)架構(gòu)中大猛,系統(tǒng)會被拆分為很多個(gè)微服務(wù)挽绩。那么作為客戶端要如何去調(diào)用這么多的微服...
    Zal哥哥閱讀 961評論 1 2