RateLimiter:限流N个请求,但允许通过了N+个请求

懵懂的女人 提交于 2020-01-26 12:05:23

问题描述
接口:getUrlDic我设置了限流5个,但是在第一秒的请求了,实际允许通过了9个(或10个),之后正常
RateLimiter使用方式参考:https://blog.csdn.net/fly910905/article/details/103644950

标题
问题分析
RateLimiter内部有个实现:SmoothBursty

SmoothBursty
SmoothBursty限流器使用令牌桶算法实现,这个限流器在空闲时候能够存储一定的令牌(默认是1秒钟时间产生的令牌),可以应对空闲一段时间后突然的爆发量请求。
guava的RateLimiter有一个核心的设计思想:当前请求的债务(请求的令牌大于限流器存储的令牌数)由下一个请求来偿还(上个请求亏欠的令牌,下个请求需要等待亏欠令牌生产出来以后才能被授权)。
具体参考:https://blog.csdn.net/fly910905/article/details/103644950
因此,如果第一秒的请求时空闲很久后的有一次请求,这时RateLimiter中已经存储了N个限流请求(默认是存储了1s的限流数),这事总的可允许请求数就是:N< 空闲后第一次可允许请求数 < 2N

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!