成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

3分鐘視頻看懂令牌桶算法

novo / 3224人閱讀

摘要:視頻介紹令牌桶,分析令牌桶原理和代碼實(shí)現(xiàn)你好,我是好剛,這一講我們來(lái)了解令牌桶。總結(jié)下令牌桶算法的特點(diǎn),令牌桶即可以控制進(jìn)入系統(tǒng)的請(qǐng)求請(qǐng)求量,同時(shí)允許突發(fā)流量。

視頻介紹令牌桶,分析令牌桶原理和代碼實(shí)現(xiàn)

https://www.bilibili.com/vide...

你好,我是好剛,這一講我們來(lái)了解令牌桶(Token Bucket)。

先想象有一個(gè)木桶,系統(tǒng)按照固定速率,例如10ms 每次,往桶里加入Token,如果桶已經(jīng)滿了就不再添加。新請(qǐng)求來(lái)臨時(shí),會(huì)各自拿走一個(gè)Token,如果沒(méi)有Token 就拒絕服務(wù)。這里如果一段時(shí)間沒(méi)有請(qǐng)求時(shí),桶內(nèi)就會(huì)積累一些token,下次一旦有突發(fā)流量,只要token 足夠,也能一次處理。

總結(jié)下令牌桶算法的特點(diǎn),令牌桶即可以控制進(jìn)入系統(tǒng)的請(qǐng)求請(qǐng)求量,同時(shí)允許突發(fā)流量。

在秒殺活動(dòng)中,用戶的請(qǐng)求速率是不固定的,這里我們假定為10r/s,令牌按照5個(gè)每秒的速率放入令牌桶,桶中最多存放20個(gè)令牌,那系統(tǒng)就只會(huì)允許持續(xù)的每秒處理5 個(gè)請(qǐng)求,或者每隔4 秒,等桶中20 個(gè)令牌攢滿后,一次處理20個(gè)請(qǐng)求的突發(fā)情況,保證系統(tǒng)穩(wěn)定性。

偽代碼實(shí)現(xiàn):

rate = 5.0; // unit: messages
per  = 8.0; // unit: seconds
allowance = rate; // unit: messages
last_check = now(); // floating-point, e.g. usec accuracy. Unit: seconds

when (message_received):
    current = now();
    time_passed = current - last_check;
    last_check = current;
    allowance += time_passed * (rate / per);
    
    if (allowance > rate):
        allowance = rate; // throttle
    
    if (allowance < 1.0):
        discard_message();
    else:
        forward_message();
        allowance -= 1.0;
令牌通算法PHP 實(shí)現(xiàn)
//速度 桶大小 / 時(shí)間段
$rate = $maxRequests / $period;

$t_key = $keyTime($id); //最后一次獲取令牌時(shí)間
$a_key = $keyAllow($id); //已有令牌數(shù)

//判斷是否有最后一次獲取令牌記錄
if ($cache->exists($t_key)) {
    $c_time = time();
    //計(jì)算上一次獲取令牌到現(xiàn)在過(guò)去的時(shí)間
    $time_passed = $c_time - $cache->get($t_key);
    $cache->set($t_key, $c_time, $ttl);

    //獲取桶中令牌數(shù)
    $allow = $cache->get($a_key);
    $allow += $time_passed * $rate; //加上最后一次消費(fèi)令牌到現(xiàn)在期間增長(zhǎng)的令牌數(shù)

    //令牌數(shù)不能超過(guò)最大數(shù)
    if ($allow > $maxRequests) {
        $allow = $maxRequests;
    }

    //使用的令牌數(shù)不能超過(guò)最大限制
    if ($allow < $use) {
        $cache->set($a_key, $allow, $ttl);
        return 0;
    } else {
        //消費(fèi)令牌
        $cache->set($a_key, $allow - $use, $ttl);
        return (int) ceil($allow);
    }
} else {
    //記錄當(dāng)前時(shí)間為最后一次處理時(shí)間,用于下次使用
    $cache->set($t_key, time(), $ttl);
    //沒(méi)有令牌時(shí)按照最大令牌數(shù)處理
    $cache->set($a_key, $maxRequests - $use, $ttl);
    return $maxRequests;
}
參考資料

Token bucket wiki

PHP Rate Limiting Library With Token Bucket Algorithm

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28997.html

相關(guān)文章

  • 8分鐘視頻看懂限流算法

    摘要:視頻介紹限流算法,分析漏桶算法和令牌算法的應(yīng)用場(chǎng)景,算法原理和算法實(shí)現(xiàn)方法視頻在這里分鐘看懂限流算法你好,我是好剛,這一講我們來(lái)了解限流算法。這里限流的常用算法有漏桶算法和令牌桶算法。所以令牌桶算法的特點(diǎn)是允許突發(fā)流量。 視頻介紹限流算法,分析漏桶算法和令牌算法的應(yīng)用場(chǎng)景,算法原理和算法實(shí)現(xiàn)方法 【視頻在這里】 8分鐘看懂限流算法 你好,我是好剛,這一講我們來(lái)了解限流算法 (Rate ...

    MAX_zuo 評(píng)論0 收藏0
  • 接口限流的常用算法匯總

    摘要:接口限流的常用算法計(jì)數(shù)器法計(jì)數(shù)器法是限流算法里最簡(jiǎn)單也是最容易實(shí)現(xiàn)的一種算法。由此可見(jiàn),當(dāng)滑動(dòng)窗口的格子劃分的越多,那么滑動(dòng)窗口的滾動(dòng)就越平滑,限流的統(tǒng)計(jì)就會(huì)越精確。漏桶算法漏桶算法,又稱。 接口限流 什么是接口限流 那么什么是限流呢?顧名思義,限流就是限制流量,包括并發(fā)的流量和一定時(shí)間內(nèi)的總流量,就像你寬帶包了1個(gè)G的流量,用完了就沒(méi)了,所以控制你的使用頻率和單次使用的總消耗。通過(guò)限...

    gyl_coder 評(píng)論0 收藏0
  • 分布式系統(tǒng)關(guān)注點(diǎn)——想通關(guān)「限流」?只要這一篇

    摘要:之前有了解到哥的一部分讀者們沒(méi)有充分搞清楚限流和熔斷的關(guān)系。后者表示系統(tǒng)在同一時(shí)刻能處理的最大請(qǐng)求數(shù)量,比如次的并發(fā)。后續(xù)限流策略需要設(shè)定的具體標(biāo)準(zhǔn)數(shù)值就是從這些指標(biāo)中來(lái)的。限流閾值不繼續(xù)處理請(qǐng)求。 如果這是第二次看到我的文章,歡迎掃描文末二維碼訂閱我喲~本文長(zhǎng)度為2869字,建議閱讀8分鐘。 可能你在網(wǎng)上看過(guò)不少「限流」相關(guān)的文章,但是z哥的這篇可能是最全面,最深入淺出的一篇了(容我...

    CollinPeng 評(píng)論0 收藏0
  • 服務(wù)限流(自定義注解令牌算法)

    摘要:自定義注解實(shí)現(xiàn)基于接口限流仔細(xì)看會(huì)發(fā)現(xiàn)上面的簡(jiǎn)單實(shí)現(xiàn)會(huì)造成我每個(gè)接口都要寫一次限流方法代碼很冗余所以采用來(lái)使用自定義注解來(lái)實(shí)現(xiàn)。 服務(wù)限流 -- 自定義注解基于RateLimiter實(shí)現(xiàn)接口限流 令牌桶限流算法showImg(https://segmentfault.com/img/bVbgTi6?w=2420&h=1547);圖片來(lái)自網(wǎng)上 令牌桶會(huì)以一個(gè)恒定的速率向固定容量大小桶...

    microcosm1994 評(píng)論0 收藏0
  • [登錄那些事] 郵件發(fā)送,限流,漏令牌

    摘要:關(guān)于如何限速,有兩個(gè)比較出名的算法,漏桶算法與令牌桶算法,這里對(duì)其簡(jiǎn)單介紹一下,最后再實(shí)踐在我發(fā)郵件的中以下是發(fā)送郵件的,已限制為一分鐘兩次,你可以通過(guò)修改進(jìn)行試驗(yàn)。 前段時(shí)間,我使用了 jwt 來(lái)實(shí)現(xiàn)郵箱驗(yàn)證碼的校驗(yàn)與用戶認(rèn)證與登錄,還特別寫了一篇文章作為總結(jié)。 在那篇文章中,提到了一個(gè)點(diǎn),如何限速。 在短信驗(yàn)證碼和郵箱驗(yàn)證碼,如果不限速,被惡意攻擊造成大量的 QPS,不僅拖垮了服務(wù)...

    wpw 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<