controller:@Controller@RequestMapping("/activity")public class AopController {@ResponseBody@RequestMapping("/seckill")@AccessLimit(limit = 4,sec = 10)//加上自定义注解即可public String test (HttpServletRequest request,@RequestParam(value = https://www.isolves.com/it/cxkf/jiagou/2020-01-02/"username",required = false) String userName){//TODO somethings……return"hello world !";}}
配置文件:/*springmvc的配置文件中加入自定义拦截器*/<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.pptv.activityapi.controller.pointsmall.AccessLimitInterceptor"/></mvc:interceptor></mvc:interceptors>
访问效果如下,10s内访问接口超过4次以上就过滤请求,原理和计数器算法类似:
文章插图
接入层限流主要介绍nginx 限流,采用漏桶算法 。
限制原理:可一句话概括为:“根据客户端特征,限制其访问频率”,客户端特征主要指IP、UserAgent等 。使用IP比UserAgent更可靠,因为IP无法造假,UserAgent可随意伪造 。整编:微信公众号,搜云库技术团队,ID:souyunku
用limit_req模块来限制基于IP请求的访问频率:
http://nginx.org/en/docs/http/ngxhttplimitreqmodule.html
也可以用tengine中的增强版:
http://tengine.taobao.org/documentcn/httplimitreqcn.html
1、并发数和连接数控制的配置:
nginx http配置:#请求数量控制,每秒20个limit_req_zone $binary_remote_addr zone=one:10m rate=20r/s;#并发限制30个limit_conn_zone $binary_remote_addr zone=addr:10m;server块配置limit_req zone=one burst=5;limit_conn addr 30;
2、ngxhttplimitconnmodule 可以用来限制单个IP的连接数:ngxhttplimitconnmodule模块可以按照定义的键限定每个键值的连接数 。可以设定单一 IP 来源的连接数 。并不是所有的连接都会被模块计数;只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数 。
http {limit_conn_zone $binary_remote_addr zone=addr:10m;...server {...location /download/ {limit_conn addr 1;}
【高并发之API接口,分布式,防刷限流,如何做?】
推荐阅读
- Web 攻击越发复杂,如何保证云上业务高可用性的同时系统不被入侵?| 专家谈
- Nginx 为什么是高效服务器,架构设计是怎样的?
- 床上可以写字的小桌子一般买多高,一般写字桌子多高
- 八零后弃外企高薪销售 改行做茶膏
- 都江堰四措并举推进茶业升级
- 教练|职业足球运动员真是个高危职业,这五点和三个方面,都要考虑
- 海豚跟虎鲸哪个聪明 海豚和白鲸哪个智商更高
- 三件事,能看出你情商高低
- 如何搭建一支高效的互联网运营团队
- 淘宝商品竞争度高了好还是低了好 淘宝竞争度越大越好吗