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