最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud微服務(wù)網(wǎng)關(guān)限流方式

 更新時(shí)間:2024年08月13日 10:02:23   作者:王樂(lè)樂(lè)君  
這篇文章主要介紹了SpringCloud微服務(wù)網(wǎng)關(guān)限流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.限流的兩種實(shí)現(xiàn)方式

nginx限流

在nginx中,通過(guò)限流可以規(guī)定一個(gè)一個(gè)地址映射每一秒可以被訪問(wèn)多少次,甚至是限制每一個(gè)用戶(這里的用戶指的是訪問(wèn)改地址映射的用戶的IP)在規(guī)定的時(shí)間內(nèi)可以訪問(wèn)的次數(shù),防止用戶多次操作或者是惡意請(qǐng)求攻擊服務(wù)。

網(wǎng)關(guān)限流

網(wǎng)關(guān)可以提供用戶統(tǒng)一的訪問(wèn)入口,在Nginx限流過(guò)后,依然會(huì)有很大一波流量會(huì)承載的網(wǎng)關(guān)上,那這個(gè)時(shí)候的限流是針對(duì)于網(wǎng)關(guān)甚至是針對(duì)于網(wǎng)關(guān)所掛在的微服務(wù),我們需要限定用戶在只能針對(duì)某個(gè)微服務(wù)在特定的時(shí)間段內(nèi)只能訪問(wèn)多少次,如果不加限制的會(huì),可能會(huì)因?yàn)椴l(fā)量的過(guò)大導(dǎo)致服務(wù)宕機(jī),甚至引起雪崩效應(yīng)。

2.架構(gòu)圖

3.為什么需要兩個(gè)限流

原因有以下幾點(diǎn):

  • 1.Nginx限流過(guò)后流量仍然很大:為nginx限流只是針對(duì)于用戶訪問(wèn)的一個(gè)入口,這個(gè)入口直接開放給網(wǎng)關(guān),這個(gè)時(shí)候你不清楚用戶真正的訪問(wèn)意圖,如果在這里的限制力度過(guò)大,導(dǎo)致用戶能請(qǐng)求的次數(shù)過(guò)少,就會(huì)導(dǎo)致頁(yè)面加載緩慢的問(wèn)題,畢竟有時(shí)候一個(gè)頁(yè)面的請(qǐng)求甚至?xí)^(guò)100個(gè)(例如淘寶網(wǎng)等)
  • 2.無(wú)法做到針對(duì)單個(gè)服務(wù)的限流:如果你Nginx開放了一秒一個(gè)用戶200r/s的請(qǐng)求,如果有人惡意的將所有的請(qǐng)求對(duì)準(zhǔn)你的一個(gè)服務(wù)的一個(gè)借口,很可能導(dǎo)致服務(wù)宕機(jī),所以需要網(wǎng)關(guān)這層針對(duì)每個(gè)服務(wù)進(jìn)行限流。
  • 3.無(wú)法實(shí)現(xiàn)一些自定義的限流模型:單獨(dú)的Nginx限流過(guò)于單一,無(wú)法滿足特定的業(yè)務(wù)需求。

4.如何實(shí)現(xiàn)限流

具體的實(shí)現(xiàn)方式是令牌桶算法,就是某一時(shí)刻一個(gè)IP最多只能訪問(wèn)有效的次數(shù)。

創(chuàng)建令牌桶的實(shí)現(xiàn)

這里需要將其配置為bean,而且需要傳入一個(gè)唯一標(biāo)識(shí)作為令牌,這里的令牌最好是訪問(wèn)你的服務(wù)的IP,這樣就可以做到限制。

    @Bean(name = "ipKeyResolver")
    public KeyResolver userKeyResolver(){
        return new KeyResolver() {
            @Override
            public Mono<String> resolve(ServerWebExchange exchange) {
                String ip = exchange.getRequest().getRemoteAddress().getHostString();
                System.out.println("你的IP地址是"+ip);
                return Mono.just(ip);
            }
        };
    }

配置

這里是需要配置redis的,因?yàn)檫@個(gè)令牌桶是基于redis實(shí)現(xiàn)的。

spring:
  application:
    name: gateway-admin
  cloud:
    gateway:
      globalcors:
        cors-configurations:
          '[/**]':
              allowedOrigins: "*"
              allowedMethods:
              - GET
              - POST
              - PUT
              - DELETE
      routes:
      - id: file
        #uri: http://localhost:8001
        uri: lb://file
        filters:
        - StripPrefix=1
        #固定配置
        - name: RequestRateLimiter
          args:
          	#上面配置的令牌桶的實(shí)現(xiàn)的bean的名稱
            key-resolver: "#{@ipKeyResolver}"
            #可以允許的一秒中的訪問(wèn)次數(shù)
            redis-rate-limiter.replenishRate: 1
            redis-rate-limiter.burstcapacity: 1
        predicates:
        - Path=/brand/**
  redis:
    host: redis的ip地址
    port: 6379

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java面試題 從源碼角度分析HashSet實(shí)現(xiàn)原理

    Java面試題 從源碼角度分析HashSet實(shí)現(xiàn)原理

    這篇文章主要介紹了Java面試題 從源碼角度分析HashSet實(shí)現(xiàn)原理?,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Spring單例類加載多例屬性問(wèn)題實(shí)例解析

    Spring單例類加載多例屬性問(wèn)題實(shí)例解析

    本文給大家介紹Spring單例類加載多例屬性問(wèn)題實(shí)例解析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-03-03
  • java 中用split分割字符串,最后的空格等不被拆分的方法

    java 中用split分割字符串,最后的空格等不被拆分的方法

    下面小編就為大家?guī)?lái)一篇java 中用split分割字符串,最后的空格等不被拆分的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • MyBatis批量插入大量數(shù)據(jù)(1w以上)

    MyBatis批量插入大量數(shù)據(jù)(1w以上)

    MyBatis進(jìn)行批量插入數(shù)時(shí),一次性插入超過(guò)一千條的時(shí)候MyBatis開始報(bào)錯(cuò),本文主要介紹了MyBatis批量插入大量數(shù)據(jù)的解決方法,感興趣的可以了解一下
    2022-01-01
  • IDEA集成DeepSeek的詳細(xì)教程(保姆級(jí)教程)

    IDEA集成DeepSeek的詳細(xì)教程(保姆級(jí)教程)

    DeepSeek作為一款強(qiáng)大的代碼搜索和分析工具,能夠幫助開發(fā)者快速定位代碼、理解項(xiàng)目結(jié)構(gòu)以及優(yōu)化代碼質(zhì)量,本文將詳細(xì)介紹如何在IntelliJ?IDEA中集成DeepSeek,并展示如何利用它來(lái)提升開發(fā)效率,感興趣的朋友一起看看吧
    2025-02-02
  • Java多線程通訊之wait,notify的區(qū)別詳解

    Java多線程通訊之wait,notify的區(qū)別詳解

    這篇文章主要介紹了Java多線程通訊之wait,notify的區(qū)別詳解,非常不錯(cuò),具有一定的參考借鑒借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Jackson自定義序列化反序列化注解加解密字段詳解

    Jackson自定義序列化反序列化注解加解密字段詳解

    這篇文章主要介紹了Jackson自定義序列化反序列化注解加解密字段詳解,一些場(chǎng)景中,數(shù)據(jù)庫(kù)字段用于存儲(chǔ)json格式數(shù)據(jù),處于安全的考慮,該json數(shù)據(jù)中,某些敏感信息字段需要做加密存儲(chǔ),例如身份證號(hào)、手機(jī)號(hào)等,需要的朋友可以參考下
    2023-11-11
  • IDEA社區(qū)版下載安裝流程詳解(小白篇)

    IDEA社區(qū)版下載安裝流程詳解(小白篇)

    這篇文章主要介紹了IDEA社區(qū)版下載安裝流程詳解(小白篇),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringBoot 定制化返回?cái)?shù)據(jù)的實(shí)現(xiàn)示例

    SpringBoot 定制化返回?cái)?shù)據(jù)的實(shí)現(xiàn)示例

    這篇文章主要介紹了SpringBoot 定制化返回?cái)?shù)據(jù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 從Java到JSON一起探索Jackson的魔力

    從Java到JSON一起探索Jackson的魔力

    Jackson是一個(gè)用于處理JSON數(shù)據(jù)的開源Java庫(kù),這篇文章主要為大家介紹了Java是如何利用Jackson處理JSON數(shù)據(jù)的,感興趣的小伙伴可以了解一下
    2023-05-05

最新評(píng)論

长泰县| 盐山县| 大竹县| 奉贤区| 和龙市| 工布江达县| 班玛县| 黄冈市| 象山县| 平南县| 芜湖市| 平果县| 吴旗县| 阜南县| 运城市| 鹤岗市| 德安县| 太白县| 南城县| 镇原县| 香河县| 阳高县| 长子县| 裕民县| 汨罗市| 钦州市| 博白县| 公安县| 交城县| 蒲城县| 阿克陶县| 多伦县| 冀州市| 武穴市| 盖州市| 永平县| 铅山县| 年辖:市辖区| 元江| 临安市| 南和县|