亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

spring?項目實現(xiàn)限流方法示例

 更新時間:2022年07月15日 11:08:54   作者:java3y  
這篇文章主要為大家介紹了spring項目實現(xiàn)限流的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

01、為什么AUSTIN項目需要限流

眾所周知,服務器能處理的請求數(shù)是有限的,如果請求量特別大,我們就可能需要做限流。

限流處理的姿勢:要么就讓請求等待,要么就把請求給扔了

從系統(tǒng)架構來看,我們的統(tǒng)一處理入口在austin-api接入層上,austin-api接入層做完簡單的參數(shù)校驗以及參數(shù)拼接后,就將請求轉發(fā)到消息隊列上了

按正常來說,因為接了消息隊列且接入層沒有什么耗時的操作,那對外的接口壓力不大的。

沒錯的,austin要接入限流也并不是在austin-api接入層上做,是在austin-handler消息處理下發(fā)層。austin-handler消息處理下發(fā)層我們是用線程池去隔離不同的消息渠道不同的消息類型。

在系統(tǒng)本身上其實沒有性能相關的問題,但我們下發(fā)的渠道可能就需要我們?nèi)タ刂普{(diào)用的速率。

騰訊云短信默認限制3000次/秒調(diào)用下發(fā)接口

釘釘渠道對應用消息和群機器人消息都有接口調(diào)用的限制

....

在保證下發(fā)速度的前提下,為了讓業(yè)務方所下發(fā)的消息其用戶能正常接收到和下游渠道的穩(wěn)定性,我們需要給某些渠道進行限流

于是在這個背景下,我目前定義了兩種限流策略:

1、按照請求數(shù)限流

2、按照下發(fā)用戶數(shù)限流

02、如何實現(xiàn)限流?

想要實現(xiàn)限流,擺在我們面前有兩個選擇:

1、單機限流

2、分布式限流

咋一看,線上不可能只部署一臺機器去發(fā)送整個公司的消息推送的,我們的系統(tǒng)應用在線上環(huán)境絕對是集群部署的,那肯定就需要上分布式限流了,對吧?

但實際上分布式限流實現(xiàn)并不簡單,目前分布式限流的方案一般借助兩個中間件

1、Redis

2、Sentinel

我們可能會用Redis的setnx/incrby+expire命令(從而實現(xiàn)計數(shù)器、令牌桶限流)/zset數(shù)據(jù)結構(從而實現(xiàn)滑動窗口限流)

Redis實現(xiàn)的限流想要比較準確,無論是哪種方式,都要依靠lua腳本

而Sentinel支持單機限流和分布式限流,Sentinel分布式限流需要部署Token服務器

對于分布式限流而言,不管用哪一種方案,使用的成本和技術挑戰(zhàn)都是比較大的。

如果用單機限流的話,那就簡單得多了,省事直接用Guava包下的RateLimiter就完了。缺點就在于:它只能控制單機的限流,如果發(fā)生了服務器擴容和縮容,它是感知不到的。

有的人就給出了方案:那我用Zookeeper監(jiān)聽服務器的數(shù)量不就好了嗎。理論上確實是這樣的:每臺機器限流值=限流總值/服務器數(shù)量

不過這又要去依賴Zookeeper,Zookeeper集群本身也有一堆狀態(tài)相關的問題。

我是怎么實現(xiàn)的?單機限流一把梭

03、代碼設計

從上面的描述可以看到,austin的限流我是要做在具體渠道上的,根據(jù)現(xiàn)有的代碼設計我要的就是在各個的Handler上寫上限流的代碼。

我本身就設計了BaseHandler抽象類作為模板方法設計模式,此次限流的設計我的是:

1、將flowControl定義為abstract抽象方法,子類渠道去實現(xiàn)限流的代碼

2、子類在初始化的時候定義限流參數(shù),BaseHandler父類根據(jù)限流參數(shù)統(tǒng)一實現(xiàn)限流的邏輯

我選擇了第二種方式,主要是我認為對于各個渠道而言,只是限流值是不同的,限流的邏輯應該都是一樣的,沒必要在每個子類上實現(xiàn)類似的邏輯。

而限流的邏輯就比較簡單了,主要就使用RateLimit提供的易用API實現(xiàn)

沒錯,限流值的大小我是配置在apollo分布式配置中心的。假設以后真的要擴縮容了,那到時候提前把分布式配置中心的值給改掉,也能解決一部分的問題。

04、總結

扯了半天,原來就用了Guava包的RateLimit實現(xiàn)了單機限流,就這么簡單,只是把限流值配置在分布式配置中心上而已。

很多時候,設計簡單的代碼可能實現(xiàn)并不完美,并不智能,并不優(yōu)雅,但它付出的代價往往是最小的。

雖說如此,如果大家想要了解Redis+lua實現(xiàn)的同學可以fetch下austin最新的代碼,就我寫文章這段時間里,已經(jīng)有老哥提了pull request用Redis+lua實現(xiàn)了滑動窗口去重的功能了,本質上是一樣的。我已經(jīng)merge到master分支了。

austin消息推送平臺項目源碼Gitee鏈接:gitee.com/austin

austin消息推送平臺項目源碼GitHub鏈接:github.com/austin

以上就是spring 項目實現(xiàn)限流方法示例的詳細內(nèi)容,更多關于spring 項目限流的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解Spring AOP

    詳解Spring AOP

    本文非常詳細講解了Spring AOP,本篇文章通過大量的代碼,講解了Spring AOP的使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 淺談Java生成唯一標識碼的三種方式

    淺談Java生成唯一標識碼的三種方式

    我們經(jīng)常會遇到這樣的場景,需要生成一個唯一的序列號來表明某一個數(shù)據(jù)的唯一性,本文主要介紹了淺談Java生成唯一標識碼的三種方式,感興趣的可以來了解一下
    2022-01-01
  • 關于Mybatis-Plus字段策略與數(shù)據(jù)庫自動更新時間的一些問題

    關于Mybatis-Plus字段策略與數(shù)據(jù)庫自動更新時間的一些問題

    這篇文章主要介紹了關于Mybatis-Plus字段策略與數(shù)據(jù)庫自動更新時間的一些問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • SpringCloud Gateway 利用 Mysql 實現(xiàn)動態(tài)路由的方法

    SpringCloud Gateway 利用 Mysql 實現(xiàn)動態(tài)路由的方法

    這篇文章主要介紹了SpringCloud Gateway 利用 Mysql 實現(xiàn)動態(tài)路由的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Java數(shù)據(jù)結構與算法之插值查找解析

    Java數(shù)據(jù)結構與算法之插值查找解析

    這篇文章主要介紹了Java數(shù)據(jù)結構與算法之插值查找解析,插值查找算法類似于二分查找,不同的就是插值查找每次從自適應mid處開始查找,需要的朋友可以參考下
    2023-12-12
  • Springmvc ajax跨域請求處理方法實例詳解

    Springmvc ajax跨域請求處理方法實例詳解

    這篇文章主要介紹了Springmvc ajax跨域請求處理方法實例詳解,需要的朋友可以參考下
    2017-10-10
  • 如何利用泛型封裝通用的service層

    如何利用泛型封裝通用的service層

    這篇文章主要介紹了如何利用泛型封裝通用的service層,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring?Boot?集成Redisson實現(xiàn)分布式鎖詳細案例

    Spring?Boot?集成Redisson實現(xiàn)分布式鎖詳細案例

    這篇文章主要介紹了Spring?Boot?集成Redisson實現(xiàn)分布式鎖詳細案例,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • SpringBoot生產(chǎn)環(huán)境打包如何去除無用依賴

    SpringBoot生產(chǎn)環(huán)境打包如何去除無用依賴

    這篇文章主要介紹了SpringBoot生產(chǎn)環(huán)境打包如何去除無用依賴問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java SPI用法案例詳解

    Java SPI用法案例詳解

    這篇文章主要介紹了Java SPI用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論