社区
教程
Wiki
注册
登录
创作新主题
社区所有版块导航
Python
python开源
Django
Python
DjangoApp
pycharm
DATA
docker
Elasticsearch
分享
问与答
闲聊
招聘
翻译
创业
分享发现
分享创造
求职
区块链
支付之战
aigc
aigc
chatgpt
WEB开发
linux
MongoDB
Redis
DATABASE
NGINX
其他Web框架
web工具
zookeeper
tornado
NoSql
Bootstrap
js
peewee
Git
bottle
IE
MQ
Jquery
机器学习
机器学习算法
Python88.com
反馈
公告
社区推广
产品
短视频
印度
印度
一周十大热门主题
用 Python 写 3D 游戏,太赞了!
GitHub版Devin上线,会打字就能开发应用,微软CEO:重新定义IDE
Handcalcs,让python科学计算过程更清晰
爆出!ChatGPT 5:发布日期、功能和价格
从今天起,ChatGPT会记住每一位付费用户
探索 MySQL 递归查询,优雅的给树结构分页
【高级会员】新浪高管数据信息数据(含python代码,1990-2022年)
Python团队还没解散完,谷歌又对Flutter、Dart动手了
科普:深度学习训练,不同预算GPU选购指南
AIGC“话”心声:劳动最光荣
关注
Py学习
»
NGINX
一次性搞定 Nginx 限流,问你怕不怕!
Java大后端
• 3 年前 • 519 次点击
来源:http://suo.im/5E5Bvi
Nginx现在已经是最火的负载均衡之一,在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景。Nginx的限流主要是两种方式:限制访问频率和限制并发连接数。
一、限制访问频率(正常流量)
Nginx中我们使用
ngx_http_limit_req_module
模块来限制请求的访问频率,基于漏桶算法原理实现。接下来我们使用 nginx limit_req_zone 和 limit_req 两个指令,限制单个IP的请求处理速率。
语法:limit_req_zone key zone rate
key :定义限流对象,binary_remote_addr 是一种key,表示基于 remote_addr(客户端IP) 来做限流,binary_ 的目的是压缩内存占用量。
zone:定义共享内存区来存储访问信息, myRateLimit:10m 表示一个大小为10M,名字为myRateLimit的内存区域。1M能存储16000 IP地址的访问信息,10M可以存储16W IP地址访问信息。
rate:用于设置最大访问速率,rate=10r/s 表示每秒最多处理10个请求。Nginx 实际上以毫秒为粒度来跟踪请求信息,因此 10r/s 实际上是限制:每100毫秒处理一个请求。这意味着,自上一个请求处理完后,若后续100毫秒内又有请求到达,将拒绝处理该请求。
二、限制访问频率(突发流量)
按上面的配置在流量突然增大时,超出的请求将被拒绝,无法处理突发流量,那么在处理突发流量的时候,该怎么处理呢?Nginx提供了 burst 参数来解决突发流量的问题,并结合 nodelay 参数一起使用。burst 译为突发、爆发,表示在超过设定的处理速率后能额外处理的请求数。
burst=20 nodelay
表示这20个请求立马处理,不能延迟,相当于特事特办。不过,即使这20个突发请求立马处理结束,后续来了请求也不会立马处理。
burst=20 相当于缓存队列中占了20个坑,即使请求被处理了,这20个位置这只能按 100ms一个来释放。这就达到了速率稳定,但突然流量也能正常处理的效果。
三、限制并发连接数
Nginx 的
ngx_http_limit_conn_module
模块提供了对资源连接数进行限制的功能,使用 limit_conn_zone 和 limit_conn 两个指令就可以了。
limit_conn perip 20:对应的key是 $binary_remote_addr,表示限制单个IP同时最多能持有20个连接。
limit_conn perserver 100:对应的key是 $server_name,表示虚拟主机(server) 同时能处理并发连接的总数。注意,只有当 request header 被后端server处理后,这个连接才进行计数。
(完)
最近热文:
分享一份Java架构师学习资料!
又臭又长!流着泪我也要把它给改完!
为什么放弃Hibernate、JPA、Mybatis!
都说了多少遍,不要再学 JSP 了!
阿里内部员工,Java问题常用的工具单
BAT都在使用的开源接口管理平台
超十万人在用的Java 工具类库!
SQL 优化经历:从 30248.271s 到 0.001s
——长按关注Java大后端
——
戳原文,获取一份面试题资料!
Python社区是高质量的Python/Django开发社区
本文地址:
http://www.python88.com/topic/71596
519 次点击
登录后回复