原文链接: https://blog.csdn.net/zrg523/article/details/82185088
总结:
1.控制并发数量 Semaphore
2.控制访问速率
算法:
-
漏桶算法
-
令牌桶算法
实现
- Google开源工具包Guava提供的限流工具类RateLimiter来实现控制速率
3.控制单位时间窗口内请求数
应用级限流的一些方法就介绍完了。假设将应用部署到多台机器,应用级限流方式只是单应用内的请求限流,不能进行全局限流。因此我们需要分布式限流和接入层限流来解决这个问题。
----------------------------------------------------------------------------
1.分布式限流
- 自定义注解+拦截器+Redis实现限流 (单体和分布式均适用,全局限流)
2.接入层限流
- 主要介绍nginx 限流,采用漏桶算法。限制原理:可一句话概括为:“根据客户端特征,限制其访问频率”,客户端特征主要指IP、UserAgent等。使用IP比UserAgent更可靠,因为IP无法造假,UserAgent可随意伪造。