<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
眾所周知,伺服器能處理的請求數是有限的,如果請求量特別大,我們就可能需要做限流。
限流處理的姿勢:要麼就讓請求等待,要麼就把請求給扔了
從系統架構來看,我們的統一處理入口在austin-api
接入層上,austin-api
接入層做完簡單的引數校驗以及引數拼接後,就將請求轉發到訊息佇列上了
按正常來說,因為接了訊息佇列且接入層沒有什麼耗時的操作,那對外的介面壓力不大的。
沒錯的,austin要接入限流也並不是在austin-api
接入層上做,是在austin-handler
訊息處理下發層。austin-handler
訊息處理下發層我們是用執行緒池去隔離不同的訊息渠道不同的訊息型別。
在系統本身上其實沒有效能相關的問題,但我們下發的渠道可能就需要我們去控制呼叫的速率。
騰訊雲簡訊預設限制3000次/秒呼叫下發介面
釘釘渠道對應用訊息和群機器人訊息都有介面呼叫的限制
....
在保證下發速度的前提下,為了讓業務方所下發的訊息其使用者能正常接收到和下游渠道的穩定性,我們需要給某些渠道進行限流
於是在這個背景下,我目前定義了兩種限流策略:
1、按照請求數限流
2、按照下發使用者數限流
想要實現限流,擺在我們面前有兩個選擇:
1、單機限流
2、分散式限流
咋一看,線上不可能只部署一臺機器去傳送整個公司的訊息推播的,我們的系統應用線上上環境絕對是叢集部署的,那肯定就需要上分散式限流了,對吧?
但實際上分散式限流實現並不簡單,目前分散式限流的方案一般藉助兩個中介軟體
1、Redis
2、Sentinel
我們可能會用Redis的setnx/incrby+expire命令(從而實現計數器、令牌桶限流)/zset資料結構(從而實現滑動視窗限流)
Redis實現的限流想要比較準確,無論是哪種方式,都要依靠lua指令碼
而Sentinel支援單機限流和分散式限流,Sentinel分散式限流需要部署Token伺服器
對於分散式限流而言,不管用哪一種方案,使用的成本和技術挑戰都是比較大的。
如果用單機限流的話,那就簡單得多了,省事直接用Guava包下的RateLimiter就完了。缺點就在於:它只能控制單機的限流,如果發生了伺服器擴容和縮容,它是感知不到的。
有的人就給出了方案:那我用Zookeeper監聽伺服器的數量不就好了嗎。理論上確實是這樣的:每臺機器限流值=限流總值/伺服器數量
不過這又要去依賴Zookeeper,Zookeeper叢集本身也有一堆狀態相關的問題。
我是怎麼實現的?單機限流一把梭
從上面的描述可以看到,austin的限流我是要做在具體渠道上的,根據現有的程式碼設計我要的就是在各個的Handler上寫上限流的程式碼。
我本身就設計了BaseHandler
抽象類作為模板方法設計模式,此次限流的設計我的是:
1、將flowControl定義為abstract抽象方法,子類渠道去實現限流的程式碼
2、子類在初始化的時候定義限流引數,BaseHandler父類別根據限流引數統一實現限流的邏輯
我選擇了第二種方式,主要是我認為對於各個渠道而言,只是限流值是不同的,限流的邏輯應該都是一樣的,沒必要在每個子類上實現類似的邏輯。
而限流的邏輯就比較簡單了,主要就使用RateLimit提供的易用API實現
沒錯,限流值的大小我是設定在apollo分散式設定中心的。假設以後真的要擴縮容了,那到時候提前把分散式設定中心的值給改掉,也能解決一部分的問題。
扯了半天,原來就用了Guava包的RateLimit實現了單機限流,就這麼簡單,只是把限流值設定在分散式設定中心上而已。
很多時候,設計簡單的程式碼可能實現並不完美,並不智慧,並不優雅,但它付出的代價往往是最小的。
雖說如此,如果大家想要了解Redis+lua實現的同學可以fetch下austin最新的程式碼,就我寫文章這段時間裡,已經有老哥提了pull request
用Redis+lua實現了滑動視窗去重的功能了,本質上是一樣的。我已經merge到master分支了。
austin訊息推播平臺專案原始碼Gitee連結:gitee.com/austin
austin訊息推播平臺專案原始碼GitHub連結:github.com/austin
以上就是spring 專案實現限流方法範例的詳細內容,更多關於spring 專案限流的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45