令牌桶中有初始容量,每來乙個請求從桶中獲取乙個令牌,並且在一定時間間隔中可以生成令牌,多餘的令牌被丟棄。可以實現限速功能。
主要針對不同使用者的請求進行限速,如果單獨使用google的ratelimiter可以控制請求的速率,如果超過限定的速率則進行等待,但是無法獲取使用者的請求速率。如果下可以根據不同的使用者進行限速。
* tokenbucket
/**
* 用於放令牌的桶
*/public
class
tokenbucket
public long getlastrefilltime()
public long getremainingtoken()
public
void
setlastrefilltime(long lastrefilltime)
public
void
setremainingtoken(long remainingtoken)
}
/**
* 限速1s內10個請求
*/public
class
ratelimitservice else else
//設定令牌桶中的remainingtoken和填充時間
tokenbucket.setlastrefilltime(refilltime);
//桶中沒有token了,並且上次獲取token完距現在不足以生成乙個token
if (tokennum == 0) else }}
}
public
class
ratelimitservicetest catch (interruptedexception e) }}
}
令牌桶 限速 限速之令牌桶和漏桶演算法
限速是大型服務裡面必備的功能,目的是對併發控制和請求進行限速來保護系統,讓系統不會因為單位時間內的請求數量太大,被打爆。對於超過了限速的那些請求,處理方法往往是 直接拒絕服務,排隊等待,或者降級處理。對於限速來說,最常用的兩個演算法是 令牌桶演算法和漏桶演算法,下面我們便來看下它們是怎麼回事。一 令...
常用的限流演算法 漏桶和令牌桶演算法
常用的限流演算法有兩種 漏桶演算法和令牌桶演算法。漏桶演算法與令牌桶演算法在表面看起來類似,很容易將兩者混淆。但事實上,這兩者具有截然不同的特性,且為不同的目的而使用。漏桶演算法與令牌桶演算法的區別在於 l 漏桶演算法能夠強行限制資料的傳輸速率。l 令牌桶演算法能夠在限制資料的平均傳輸速率的同時還允...
桶排序在海量資料中的應用
題目1 一年的全國高考考生人數為500 萬,分數使用標準分,最低100 最高900 沒有小數,你把這500 萬元素的陣列排個序。分析 對500w資料排序,如果基於比較的先進排序,平均比較次數為o 5000000 log5000000 1.112億。方法 建立801 900 100 個桶。將每個考生的...