<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringCloud Gateway 詳解

          共 3214字,需瀏覽 7分鐘

           ·

          2020-08-23 14:39

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          66套java從入門(mén)到精通實(shí)戰(zhàn)課程分享

          什么是API網(wǎng)關(guān)

          API網(wǎng)關(guān)是整個(gè)為微服務(wù)API 請(qǐng)求的入口,可以實(shí)現(xiàn)過(guò)濾API請(qǐng)求。
          過(guò)濾器適合于單個(gè)服務(wù)實(shí)現(xiàn)過(guò)濾請(qǐng)求;
          網(wǎng)關(guān)攔截整個(gè)微服務(wù)實(shí)現(xiàn)過(guò)濾請(qǐng)求,能夠解決整個(gè)微服務(wù)中冗余代碼;
          過(guò)濾器是局部攔截,網(wǎng)關(guān)實(shí)現(xiàn)全局?jǐn)r截。

          為什么需要API網(wǎng)關(guān)

          隨著微服務(wù)架構(gòu)的流行,API網(wǎng)關(guān)也越來(lái)越抽到歡迎,在微服務(wù)體系架構(gòu)中,將應(yīng)用程序劃分為幾個(gè)低耦合的服務(wù)(稱為微服務(wù))。每個(gè)微服務(wù)都有其獨(dú)特的功能,盡管微服務(wù)提供了許多好處(最顯著的是更加易于開(kāi)發(fā),部署和維護(hù)應(yīng)用程序的不同),但他們卻使客戶難以快速、安全的訪問(wèn)所需要的信息。
          API網(wǎng)關(guān)還可以充當(dāng)使用這些微服務(wù)的苦短的中央接口,從而解決其中的一些問(wèn)題??蛻舳瞬槐卦L問(wèn)數(shù)十個(gè)單獨(dú)的微服務(wù),而是可以向API網(wǎng)關(guān)發(fā)送單個(gè)請(qǐng)求,而API網(wǎng)關(guān)本身將聚集微服務(wù)。API網(wǎng)關(guān)的主要功能陳偉路由,但是使用API網(wǎng)關(guān)的原因還有很多。

          API網(wǎng)關(guān)的職能

          • 請(qǐng)求接入:作為所有API接口服務(wù)請(qǐng)求的接入點(diǎn),管理所有的接入請(qǐng)求。

          • 業(yè)務(wù)聚合:作為所有戶端業(yè)務(wù)服務(wù)的聚合點(diǎn),所有的業(yè)務(wù)都可以在這里被調(diào)用

          • 中介策略:實(shí)現(xiàn)安全、驗(yàn)證、路由、過(guò)濾、流控、緩存等策略,進(jìn)行一些必要的中介處理

          • 統(tǒng)一管理:提供配置管理工具,對(duì)所有API服務(wù)的調(diào)用生命周期和相應(yīng)的中介策略進(jìn)行統(tǒng)一管理。

          API網(wǎng)關(guān)的分類


          如上圖所示,面對(duì)互聯(lián)網(wǎng)復(fù)雜的業(yè)務(wù)系統(tǒng),基本可以將API網(wǎng)關(guān)分成兩類:流量網(wǎng)關(guān)和業(yè)務(wù)網(wǎng)關(guān)。

          **流量網(wǎng)關(guān):**跟具體的后端業(yè)務(wù)系統(tǒng)和服務(wù)完全無(wú)關(guān)的部分,比如安全策略、全局性流控策略、流量分發(fā)策略等。流量網(wǎng)關(guān)的功能跟 Web 應(yīng)用防火墻(WAF)非常類似。WAF一般是基于 Nginx/OpenResty 的 ngx_lua 模塊開(kāi)發(fā)的 Web 應(yīng)用防火墻。
          **業(yè)務(wù)網(wǎng)關(guān):**針對(duì)具體的后端業(yè)務(wù)系統(tǒng),或者是服務(wù)和業(yè)務(wù)有一定關(guān)聯(lián)性的部分,并且一般被直接部署在業(yè)務(wù)服務(wù)的前面。業(yè)務(wù)網(wǎng)關(guān)一般部署在流量網(wǎng)關(guān)之后,業(yè)務(wù)系統(tǒng)之前,比流量網(wǎng)關(guān)更靠近系統(tǒng)。我們大部分情況下說(shuō)的 API 網(wǎng)關(guān),狹義上指的是業(yè)務(wù)網(wǎng)關(guān)。并且如果系統(tǒng)的規(guī)模不大,我們也會(huì)將兩者合二為一,使用一個(gè)網(wǎng)關(guān)來(lái)處理所有的工作

          開(kāi)源API網(wǎng)關(guān)


          目前常見(jiàn)的開(kāi)源網(wǎng)關(guān)大致上按照語(yǔ)言分類有如下幾類:

          **Nginx+lua:**Open Resty、Kong、Orange、Abtesting gateway 等
          **Java:**Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等
          **Go:**Janus、fagongzi、Grpc-gateway
          **Dotnet:**Ocelot
          **NodeJS:**Express Gateway、Micro Gateway


          按照使用數(shù)量、成熟度等來(lái)劃分,主流的有 4 個(gè):

          OpenResty
          Kong
          Zuul/Zuul2
          Spring Cloud Gateway


          Spring Cloud GateWay


          概述

          SpringCloud GateWay 是 Spring Cloud 的一個(gè)全新的項(xiàng)目, 基于?Spring 5.0+Spring Boot 2.0?和?Project Reactor等技術(shù)開(kāi)發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)通過(guò)一種雞蛋呢有效的統(tǒng)一的API 路由管理方式
          Spring Cloud GateWay 作為 Spring Cloud 生態(tài)系統(tǒng)的網(wǎng)關(guān), 目標(biāo)是替代 Zuul , 在Spring Cloud2.0 以上版本種,沒(méi)有對(duì)新版本的 Zuul 2.0 以上版本最高性能版本進(jìn)行集成,仍然還是使用的 Zuul 1.x 非?
          Reactor?模式的老版本,為了提升網(wǎng)關(guān)性能, Spring Cloud GateWay 基于 WebFlux 框架實(shí)現(xiàn)的,而WebFlux 框架底層則使用了高性能的 Reactor 模式通訊框架 Netty
          Spring Cloud GateWay 的目標(biāo)是提供統(tǒng)一的路由方式且基于Filter 鏈的方式提供網(wǎng)關(guān)的基本功能,例如:安全,監(jiān)控/指標(biāo), 和限流。

          特性

          • 基于Spring Framewrok5,Project Reactor 和Spring Boot 2.0進(jìn)行構(gòu)建

          • 動(dòng)態(tài)路由:能夠匹配任何請(qǐng)求屬性;

          • 可以對(duì)路由指定 Predicate(斷言)和 Filter(過(guò)濾器);

          • 集成 Spring Cloud 服務(wù)發(fā)現(xiàn)功能;

          • 易于編寫(xiě) Predicate(斷言)和 Filter(過(guò)濾器);

          • 請(qǐng)求限流功能;

          • 支持路徑重寫(xiě)。

          Spring Cloud GateWay與Zuul區(qū)別

          1. zuul1 基于Servlet2.5使用阻塞架構(gòu),本質(zhì)上就是一個(gè)同步 Servlet,它不支持任何長(zhǎng)連接,每來(lái)一個(gè)請(qǐng)求會(huì)專門(mén)分配一個(gè)線程去處理,然后轉(zhuǎn)發(fā)到后端服務(wù),后端再啟線程處理請(qǐng)求,后端處理時(shí)網(wǎng)關(guān)的線程會(huì)阻塞,當(dāng)請(qǐng)求數(shù)量比較大時(shí),很容易造成線程池被沾滿而無(wú)法接受新的請(qǐng)求。

          2. zuul2是基于Netty實(shí)現(xiàn)的異步非阻塞編程模型,SpringCloud目前沒(méi)有整合

          3. pring Cloud Gateway 建立在 Spring Framework5、 Project Reactor 和Spring Boot 2之上,使用非阻塞 API。

          4. Spring Cloud Gateway 還支持 websocket , 并且與 Spring 緊密集成擁有更好的開(kāi)發(fā)體驗(yàn)。

          Gateway原理

          Route(路由):路由是構(gòu)建網(wǎng)關(guān)的基本模塊,它由ID,目標(biāo)URI,一系列的斷言和過(guò)濾器組成,如果斷言為true則匹配該路由

          Predicate(斷言):參考的是java8的java.util.function.Predicate開(kāi)發(fā)人員可以匹配HTTP請(qǐng)求中的所有內(nèi)容(例如請(qǐng)求頭或請(qǐng)求參數(shù)),如果請(qǐng)求與斷言相匹配則進(jìn)行路由

          Filter(過(guò)濾):指的是Spring框架中GatewayFilter的實(shí)例,使用過(guò)濾器,可以在請(qǐng)求被路由前或者之后對(duì)請(qǐng)求進(jìn)行修改。


          Web請(qǐng)求,通過(guò)一些匹配條件,定位到真正的服務(wù)節(jié)點(diǎn),并在這個(gè)轉(zhuǎn)發(fā)過(guò)程前后,進(jìn)行一些精細(xì)化控制。Predicate就是我們的匹配條件;而filter,就可以理解為一個(gè)無(wú)所不能的攔截器,有了這兩個(gè)元素,再加上目標(biāo)URL,就可以實(shí)現(xiàn)一個(gè)具體的路由了。


          客戶端向Spring Cloud Gateway發(fā)出請(qǐng)求。然后在GateWay Handler Mapping中找到與請(qǐng)求相匹配的路由,將其發(fā)送到GateWay Web Handler。
          Handler再通過(guò)制定的過(guò)濾器鏈來(lái)將請(qǐng)求發(fā)送到我們實(shí)際的服務(wù)執(zhí)行業(yè)務(wù)邏輯,然后返回。過(guò)濾器之間用虛線分開(kāi)是因?yàn)檫^(guò)濾器可能會(huì)在發(fā)送代理請(qǐng)求之前(“pre”)或之后(“post”)執(zhí)行業(yè)務(wù)邏輯。
          Filter在‘pre’類型的過(guò)濾器可以做參數(shù)校驗(yàn)、流浪監(jiān)控、日志輸出、協(xié)議轉(zhuǎn)換等, 在’post‘類型的過(guò)濾器中可以做響應(yīng)內(nèi)容、響應(yīng)頭的修改,日志的輸出,流量監(jiān)控等有著非常重要的作用。


          版權(quán)聲明:本文為博主原創(chuàng)文章,遵循?CC 4.0 BY-SA?版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。

          本文鏈接:

          https://blog.csdn.net/damishidai15/article/details/108063621



          粉絲福利:108本java從入門(mén)到大神精選電子書(shū)領(lǐng)取

          ???

          ?長(zhǎng)按上方鋒哥微信二維碼?2 秒
          備注「1234」即可獲取資料以及
          可以進(jìn)入java1234官方微信群



          感謝點(diǎn)贊支持下哈?

          瀏覽 113
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产视频久久 | 日韩无码一卡二卡三卡 | 一级婬片A片AAAA毛片A级 | 激情性无码视频在线播放 | 久久免费性爱视频 |