Sentinel icon indicating copy to clipboard operation
Sentinel copied to clipboard

[BUG] 关于滑动窗口的疑问

Open zhbHym opened this issue 2 years ago • 3 comments

我发现这样一个问题:假设我设置规则是1秒允许请求1000次。 理论上:把一秒分成十份,也就是每100毫秒允许通过的请求是100次。 我在实际测试过程中发现:如果我请求密度很高,第一个100毫秒内就能通过1000个请求,后面的900毫秒全部处于空闲状态,第二秒的第一个100毫秒也允许通过的请求数是1000个,后面的900毫秒处于空闲。 这不是令牌桶算法吗。 请问有没懂的大佬,还望不惜赐教,跪谢

zhbHym avatar Nov 03 '23 03:11 zhbHym

令牌桶可以指定你一秒放进多少令牌,如果你设置1秒允许1000次那就是1秒放进1000个令牌,像你说的这样,只能是100毫秒放进去100个令牌才可以

DokiDoki1103 avatar Nov 03 '23 04:11 DokiDoki1103

Sentinel现在的设置最小单位是秒吧,只能设置一秒内的请求次数。

zhbHym avatar Nov 03 '23 05:11 zhbHym

假设你设置规则是1秒允许请求1000次 且 你请求密度很高 滑动窗口下:第一个100ms就打满了1000次,那么100-1000ms内你都会处于限流状态,而第十一个100ms由于窗口过了开始重新计算又可以瞬间打满1000个继续限流 令牌桶下:第一个100ms就打满了1000次,在100-1000ms内会处于限流状态,而第十一个100ms桶里会恢复令牌,此时只能打满恢复的令牌数请求(取决于令牌桶的恢复策略,可能100ms只恢复100个令牌,也可能下一个一秒直接全部放满) 故:你所说的极端情况下,两种算法表现的确是一致的,但是算法本质统计的方式是不同的

BaoziruqinLRL avatar Jan 22 '24 02:01 BaoziruqinLRL