RateLimiter限流问题
2018-06-09 10:18:59
1536次阅读
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
相关话题
- RateLimiter抢购秒杀限流
- Guava RateLimiter令牌桶算法限流
- SpringMVC 限流量
- Redis实现分布式限流
- Redis+Lua实现分布式限流
- SImpleImage解决图片压缩变红问题
- 解决kindeditor中onkeydown不执行的问题
- DateTimeFormatter替换SimpleDateFormat解决线程安全问题
- Linux上使用commons-net.jar注意的问题
- mysql-connector-java-8.0.11连接MySQL 8.0问题
- vue使用provide/inject方式解决刷新当前页面问题
- 解决手机竖拍照片旋转90度问题
- Mybatis解决oracle in语句 1000个数限制的问题
- 解决Spring Boot+AngularJS因为跨域导致Session丢失问题
- 解决安卓浏览器文本无法垂直居中的问题