为什么要限流
系统在设计的时候,我们会有一个系统的预估容量,长时间超过系统能承受的TPS/QPS阈值,系统有可能会被压垮,最终导致整个服务不可用。为了避免这种情况,我们就需要对接口请求进行限流。
所以,我们可以通过对并发访问请求进行限速或者一个时间窗口内的的请求数量进行限速来保护系统或避免不必要的资源浪费,一旦达到限制速率则可以拒绝服务、排队或等待。
限流背景
系统有一个获取手机短信验证码的接口,因为是开放接口,所以为了避免用户不断的发送请求获取验证码,防止恶意刷接口的情况发生,于是用最简单的计数器方式做了限流,限制每个IP每分钟只能请求一次,然后其他每个手机号的时间窗口限制则是通过业务逻辑进行判断。一般一些接口访问量比较大的,可能会压垮系统的,则需要加入流量限制!如:秒杀等…
实现限流
1、引入依赖
2、自定义限流注解
3、限流切面
4、写一个简单的接口进行测试
5、全局异常拦截
6、接口测试
1)第一次发送,正常返回结果
2)一分钟内第二次发送,返回错误,限流提示
好了,大功告成啦
还有其他的限流方式,如滑动窗口限流方式(比计数器更严谨)、令牌桶等…,有兴趣的小伙伴可以学习一下
附源码
Original: https://www.cnblogs.com/jae-tech/p/16625091.html
Author: Jae1995
Title: SpringBoot使用自定义注解+AOP+Redis实现接口限流
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621592/
转载文章受原作者版权保护。转载请注明原作者出处!