<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
常見的限流演演算法
顧名思義,計數器演演算法是指在一定的時間視窗內允許的固定數量的請求.比如,2s內允許10個請求,30s內允許100個請求等等.如果設定的時間粒度越細,那麼相對而言限流就會越平滑,控制的粒度就會更細.
試想,如果設定的粒度比較粗會出現什麼樣的問題呢?如下圖設定一個 1000/3s 的限流計數統計.
圖中的限流策略為3s內允許的最大請求量為1000,那麼會出現2個極端:
極端情況1:
上線為800/1s,但是此刻卻有超過這個量級的請求量,那麼後果是不堪設想的.
極端情況2:
結論:
如果用統計計數演演算法,儘量保持粒度切割精細.
redis的ttl特性完美的滿足了這一需求,將時間視窗設定為key的失效時間,然後將key的值每次請求+1即可.虛擬碼實現思路:
//1.判斷是否存在該key if(EXIT(key)){ // 1.1自增後判斷是否大於最大值,並返回結果 if(INCR(key) > maxPermit){ return false; } return true; } //2.不存在key,則設定key初始值為1,失效時間為3秒 SET(KEY,1); EXPIRE(KEY,3);
漏桶演演算法核心概念:
缺點:
不難想象漏桶演演算法並不能很好的應對突發的流量限制,在某一個時間段流量激增,則漏桶演演算法處理就比較無能為力.這個時候就需要用到和他相反設計的令牌桶演演算法
如上圖所示,整個請求流程一目瞭然.簡單概括如下:
1.使用者請求資源時首選從桶裡獲取令牌,如果有令牌則放行,如此同時桶裡的令牌數量-1
2.於此同時,以一定的速率往桶裡加入令牌,這個速度是可根據實際場景隨意設定.
var key; var maxPermit;//桶的容量,即最大請求限制 var expire;//失效時間 var bucketInterval;//每次向桶裡新增令牌的時間間隔 var bucketNum;//每次向桶裡新增令牌的個數 var lastTimeKey = key +"last";//標記上一次操作時間 //判斷是否存在該key if(EXIT(key)){ var value = GET(key); var diffTime = now() - lastTimeKey; // 1.1判斷是否超出時間間隔 if(diffTime > bucketInterval){ // 1.2根據時間間隔,計算出應該向桶裡新增令牌的個數 local maxValue = value+math.floor(diff/interval)*step; if (maxValue > limit) value = limit; else value = maxValue; //設定key的值及操作時間 SET(key,value); SET(lastTimeKey,now()); } // 2.1在時間間隔內,判斷桶裡是否有值 if(value <= 0){ reurn false; }else{ // 2.2 減1 DECR(key); } reture true; } //2.不存在key,則設定key初始值為maxPermit-1 SET(key,maxPermit-1); EXPIRE(lastTimeKey,now());
上面實現程式碼只是虛擬碼,提供的是一種思路而已. 仔細想來其中某個環節其實並不完美.大家可以參考Guava的ratelimit實現思路,他的限流就是基於令牌桶演演算法,但是比較遺憾的是在單機下的限流.
思考:
就是時間間隔如果過長的話,一次性向桶裡新增的令牌數量則是桶的最大容量!那麼某個時間的瞬間請求過來,伺服器的壓力是非常大的.
所以此處增加令牌數可以設定的稍微合理些,哪怕間隔時間再長!
以上就是redis lua限流演演算法實現範例的詳細內容,更多關於redis lua限流演演算法的資料請關注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