欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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è)入口直接開(kāi)放給網(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開(kāi)放了一秒一個(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多態(tài)性定義與用法實(shí)例詳解

    Java多態(tài)性定義與用法實(shí)例詳解

    這篇文章主要介紹了Java多態(tài)性定義與用法,較為詳細(xì)的分析了多態(tài)的概念、功能以及java定義與實(shí)現(xiàn)面向?qū)ο蠖鄳B(tài)性的相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • java自動(dòng)裝箱拆箱深入剖析

    java自動(dòng)裝箱拆箱深入剖析

    基本數(shù)據(jù)(Primitive)類型的自動(dòng)裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開(kāi)始提供的功能。java語(yǔ)言規(guī)范中說(shuō)道:在許多情況下包裝與解包裝是由編譯器自行完成的(在這種情況下包裝成為裝箱,解包裝稱為拆箱)
    2012-11-11
  • Mybatis中Mapper標(biāo)簽總結(jié)大全

    Mybatis中Mapper標(biāo)簽總結(jié)大全

    這篇文章主要介紹了Mybatis中Mapper標(biāo)簽總結(jié)大全,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • spring boot的健康檢查HealthIndicators實(shí)戰(zhàn)

    spring boot的健康檢查HealthIndicators實(shí)戰(zhàn)

    這篇文章主要介紹了spring boot的健康檢查HealthIndicators實(shí)戰(zhàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • idea一招搞定同步所有配置(導(dǎo)入或?qū)С鏊信渲?

    idea一招搞定同步所有配置(導(dǎo)入或?qū)С鏊信渲?

    使用intellij idea很長(zhǎng)一段時(shí)間,軟件相關(guān)的配置也都按照自己習(xí)慣的設(shè)置好,如果需要重裝軟件,還得需要重新設(shè)置,本文就詳細(xì)的介紹了idea 同步所有配置,感興趣的可以了解一下
    2021-07-07
  • 簡(jiǎn)單了解Java的默認(rèn)和靜態(tài)方法

    簡(jiǎn)單了解Java的默認(rèn)和靜態(tài)方法

    這篇文章主要介紹了簡(jiǎn)單了解Java的默認(rèn)和靜態(tài)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Spring?Security?過(guò)濾器注冊(cè)脈絡(luò)梳理

    Spring?Security?過(guò)濾器注冊(cè)脈絡(luò)梳理

    這篇文章主要介紹了Spring?Security過(guò)濾器注冊(cè)脈絡(luò)梳理,Spring?Security在Servlet的過(guò)濾鏈中注冊(cè)了一個(gè)過(guò)濾器FilterChainProxy,它會(huì)把請(qǐng)求代理到Spring?Security自己維護(hù)的多個(gè)過(guò)濾鏈,每個(gè)過(guò)濾鏈會(huì)匹配一些URL,如果匹配則執(zhí)行對(duì)應(yīng)的過(guò)濾器
    2022-08-08
  • MyBatis的模糊查詢mapper.xml的寫法講解

    MyBatis的模糊查詢mapper.xml的寫法講解

    這篇文章主要介紹了MyBatis的模糊查詢mapper.xml的寫法講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 在Spring Boot中使用Spring-data-jpa實(shí)現(xiàn)分頁(yè)查詢

    在Spring Boot中使用Spring-data-jpa實(shí)現(xiàn)分頁(yè)查詢

    如何使用jpa進(jìn)行多條件查詢以及查詢列表分頁(yè)呢?下面我將介紹兩種多條件查詢方式。具體實(shí)例代碼大家參考下本文吧
    2017-07-07
  • mybatis二級(jí)緩存默認(rèn)未開(kāi)啟源碼的問(wèn)題

    mybatis二級(jí)緩存默認(rèn)未開(kāi)啟源碼的問(wèn)題

    這篇文章主要介紹了mybatis二級(jí)緩存默認(rèn)未開(kāi)啟源碼的問(wèn)題及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論