俗话说得好,缓存,限流和降级是系统的三把利剑。刚好项目中每天早上导出数据时因调订单接口频率过高,订单系统担心会对用户侧的使用造成影响,让我们对调用限速一下,所以就正好用上了。
常用的限流算法有2种:漏桶算法和令牌桶算法。
漏桶算法
漏桶算法:请求先进入“桶”中,然后桶以一定的速率处理请求。如果请求的速率过快会导致桶溢出。根据描述可以知道,漏桶算法会强制限制请求处理的速度。任你请求的再快还是再慢,我都是以这种速率来处理。
但是对于很多情况下,除了要求能够限制平均处理速度外,还要求能允许一定程度的的突发情况。这样的话,漏桶算法就不合适了,用令牌桶算法更合适。
令牌桶算法
令牌桶算法的原理是:系统以恒定的速率往桶里丢一定数量的令牌,请求只有拿到了令牌才能处理。当桶里没有令牌时便可拒绝服务。
Guava中的Ratelimiter便是实现的令牌桶算法,同时能支持一定程度的突发请求。
private static RateLimiter one=RateLimiter.create(2);//每秒2个 private static RateLimiter two=RateLimiter.create(2);//每秒2个 private RateLimitUtil(){}; public static void acquire(RateLimiter r,int num){ double time =r.acquire(num); System.out.println("wait time="+time); } public static void main(String[] args) throws InterruptedException { acquire(one,1); acquire(one,1); acquire(one,1); System.out.println("-----"); acquire(two,10); acquire(two,1); }
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1142
183.71 KB下载数642
644.84 KB下载数2755
相关文章
发现更多好内容猜你喜欢
AI推送时光机RateLimiter 源码分析
后端开发2023-05-31
SocketServer 源码分析
后端开发2023-01-31
CesiumJS源码分析
后端开发2023-07-06
Android AsyncTask源码分析
后端开发2022-06-06
Pythonkeras.metrics源代码分析
后端开发2022-11-13
Kafka源码分析(一)
后端开发2019-10-17
Spring refresh()源码分析
后端开发2023-07-05
Android LayoutInflater.inflate源码分析
后端开发2022-06-06
HBase WAL源码分析
后端开发2023-06-03
ahooks useRequest源码分析
后端开发2023-07-02
Spring cache源码分析
后端开发2023-06-29
Nebula Graph源码分析
后端开发2024-04-02
分析Android Choreographer源码
后端开发2024-04-02
django源码分析 LazySetti
后端开发2023-01-31
Java ConcurrentHashMap源码分析
后端开发2023-07-05
Retrofit源码分析&实践(一)【从使用入手分析源码】
后端开发2023-09-16
分布式Netty源码分析
后端开发2023-06-29
Spring事务源码分析专题(一)JdbcTemplate使用及源码分析
后端开发2019-10-22
Android ArrayMap源代码分析
后端开发2022-06-06
咦!没有更多了?去看看其它编程学习网 内容吧