RateLimiter限流问题
2018-06-09 10:18:59
1650 次阅读
0 个评论
1. 如果设置每秒存放100个令牌, 但过了好久都没有请求, 这时令牌数可能已经非常大了, 这时突然来了大量请求, 那服务器可能就会崩掉, 所以能不能限制令牌的最大数;
2. 如果令牌数巨大, 会不会占用一些资源 , 如内存资源;
3. 如果按IP限流, 每个IP对应一个Ratelimit, 随着时间的增长, 内存中的ratelimit会越来越多, 会占用大量内存, 你们是如何控制的;
问题1、RateLimiter提供两种令牌生成模式,一种是以恒定速度生成令牌,第二种是设置渐进模式,令牌缓慢提升生成速度,最终达到一个稳定值,所以你选择第二种可解决你的问题。
问题2,不会占用大量内存资源,令牌的产生是一个概念,RateLimiter是在你获取令牌的时候再去计算你需要多少,而不是预先产生的。
问题3、每个IP对应一个RateLImiter会占用大量内存,我的做法是不会对所有接口做限流,因为现实场景只有一部分特定接口会需要限流,所以不要把所有接口做限流。第二种方式,多个ip共用一个Limiter, 例如1000个ip公用一个,然后估算RateLimiter应该设置的多大。 例如对于公网的请求,一个接口公用一个就可以了; 如果你是对固定ip做限流,证明你们是相互知道的,类似于内网系统间对接,有白名单控制,所以也不需要那么大的量的RateLimiter。
2. 如果令牌数巨大, 会不会占用一些资源 , 如内存资源;
3. 如果按IP限流, 每个IP对应一个Ratelimit, 随着时间的增长, 内存中的ratelimit会越来越多, 会占用大量内存, 你们是如何控制的;
问题1、RateLimiter提供两种令牌生成模式,一种是以恒定速度生成令牌,第二种是设置渐进模式,令牌缓慢提升生成速度,最终达到一个稳定值,所以你选择第二种可解决你的问题。
问题2,不会占用大量内存资源,令牌的产生是一个概念,RateLimiter是在你获取令牌的时候再去计算你需要多少,而不是预先产生的。
问题3、每个IP对应一个RateLImiter会占用大量内存,我的做法是不会对所有接口做限流,因为现实场景只有一部分特定接口会需要限流,所以不要把所有接口做限流。第二种方式,多个ip共用一个Limiter, 例如1000个ip公用一个,然后估算RateLimiter应该设置的多大。 例如对于公网的请求,一个接口公用一个就可以了; 如果你是对固定ip做限流,证明你们是相互知道的,类似于内网系统间对接,有白名单控制,所以也不需要那么大的量的RateLimiter。
00
相关话题
- 解决执行脚本报syntax error: unexpected end of file或syntax error near unexpected token `fi'错误的问题
- 解决jenkins tomcat热部署,任务线程重复启动的方法
- Spring 5.0.3 抛出错误The request was rejected because the URL was not normalized
- MyEclipse 2016创建Maven Web 项目
- MyEclipse Maven项目加入本地jar包
- Log4j2禁止自动初始化
- Spring Boot启动时执行指定方法
- commons-lang3提示“The type StringEscapeUtils is deprecated”
- Spring启动后获取所有指定注解的Bean
- ImageIO.read()报错:ArrayIndexOutOfBoundsException: 4096、IIOException: I/O error reading PNG header!
- SImpleImage解决图片压缩变红问题
- Maven编译项目“不可映射字符”解决
- 解决@PathVariable中包含特殊字符异常
- 解决kindeditor中onkeydown不执行的问题
- MySql存储emoji表情字符解决方案