如何限制接口調(diào)用者對接口的調(diào)用頻率?問題:對某個對外暴露的接口加一個限制:調(diào)用者一分鐘之內(nèi)調(diào)用次數(shù)不能超過100次,如果超過100次就直接返回給調(diào)用者失敗的信息。給調(diào)用者一個SECRET,每次調(diào)用者需要調(diào)用接口的時候,都需要把這個SECRET帶過來(為了安全需要對key進行一系列加密的措施)一個SECRET就代表一個調(diào)用者,把相應的SECRET的調(diào)用次數(shù)放入緩存中(必須確保次數(shù)增加的原子性),并且把SECRET當做緩存的SECRET(這里如果區(qū)分方法的話,可以把方法和KEY做一次加密)。這里主要的難點就是,如何判斷調(diào)用者1分鐘之內(nèi)調(diào)用次數(shù)是否超過100?也就是很難確實這個1分鐘的開始時間。我現(xiàn)在的想法是:分別把當前秒調(diào)用的次數(shù)存入緩存。比如說,當前調(diào)用者調(diào)用次數(shù)為3,那么我就往緩存中加入KEY=SECRET_1,VALUE=3;然后調(diào)用者在第二秒調(diào)用的次數(shù)為4,那么就往緩存中加入KEY=SECRET_2,VALUE=3;如此循環(huán),當循環(huán)到61秒的時候替換KEY=SECRET_1中得VAALUE,每次調(diào)用的時候計算SECRET_1~SECRET_60的值來判斷調(diào)用次數(shù),是否超過100次。(這里具體一秒鐘調(diào)用幾次,需要通過時間戳來算出是第幾秒。這里以60秒為時間周期,并且以秒為一個時間單位,當然如果要求不是很準確的話,時間單位可以調(diào)大一點)問題 請問有沒有別的更好方法或者想法可以實現(xiàn)這個調(diào)用頻率的限制?Update:基于令牌桶的開放平臺限流框架:limiter,持續(xù)開發(fā)中...
- 2 回答
- 0 關注
- 1955 瀏覽
添加回答
舉報
0/150
提交
取消