Nginx【Nginx场景实践(什么是限流、限流算法、限流实战 )】(十一)-全面详解(学习总结---从入门到深化)

news2024/11/14 13:44:12

目录

Nginx场景实践_什么是限流

Nginx场景实践_限流算法

Nginx场景实践_限流实战 


Nginx场景实践_什么是限流

生活中的限流 

春运,一项全人类历史上最大规模的迁移活动,抢火车票一直是每年跨年以后的热点话题。

 为什么需要限流

系统设计时一般会预估负载,当系统暴露在公网中时,恶意攻击或正常突发流量等都可能导致系统被压垮,而限流就是保护措施之 一。

Nginx 的二种限流设置:

  • 控制速率。
  • 控制并发连接数。

实时效果反馈

1. 限流技术主要解决_____问题。

A 响应速度快

B 提高用户体验

C 节省带宽

D 保护系统

2. 限流技术应对的是____流量。

A 平缓

B 突发

C 稳定

D 匀速 

Nginx场景实践_限流算法

漏桶算法 

原理: 漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。 

令牌桶算法 

原理: 令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌, 当桶里没有令牌可取时,则拒绝服务。 

 漏桶 vs 令牌桶的区别

漏桶的天然特性决定了它不会发生突发流量,就算每秒1000个请求到来,那么它对后台服务输出的访问速率永远恒定。而令牌桶则不 同,其特性可以“预存”一定量的令牌,因此在应对突发流量的时候可以在短时间消耗所有令牌,其突发流量处理效率会比漏桶高,但是导向后台系统的压力也会相应增多。

实时效果反馈

1. 限流算法中_____算法具有应对突发性的流量。

A 漏桶算法 

B 令牌桶算法

C 滑动窗口

D 计数器

Nginx场景实践_限流实战 

根据nginx官网提供的说法,有两种算法,一种是漏桶算法,一种是令牌桶算法 

  • limit_req_zone 用来限制单位时间内的请求数目,以及速度限制。
  • limit_req_conn 用来限制同一时间连接数,即并发限制。

Nginx限速配置指令

语法结构

放在http{} 内

limit_req_zone $binary_remote_addr
zone=mylimit:10m rate=1r/s;

参数解析:

第一个参数:$binary_remote_addr 限制同一客户端ip地址。

第二个参数:zone=mylimit:10m 用来存储访问的频次信息。

第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还 可以有比如30r/m的。

limit_req zone=mylimit burst=1 nodelay; 

放在server{}内

参数:

第一个参数:zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name 对应。

第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置 一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到 这个缓冲区内。

第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回 503,如果没有设置,则所有请求会等待排队。 

Nginx并发限制配置指令 

ngx_http_limit_conn_module 提供了限制连接数的能力,利用 limit_conn_zone 和 limit_conn 两个指令即可。

语法结构 

http{
 #ip limit
 limit_conn_zone $binary_remote_addr zone=perip:10m;
 limit_conn_zone $server_name zone=perserver:10m;
}

在需要 限制并发数 和 下载带宽 的网站配置 server {}里加上如下代码:

server {
   limit_conn perip 10;
   limit_conn perserver 100;
}

参数说明: 补充说明下参数:

  • limit_conn perip 10 作用的key 是 $binary_remote_addr,表示限制单个IP同时最多能持有 10个连接。
  • limit_conn perserver 100 作用的key是 $server_name,表示虚拟主机(server) 同时能处理 并发连接的总数。

设置白名单 

限流主要针对外部访问,内网访问相对安全,可以不做限流,通过设置白名单即可。利用 Nginx ngx_http_geo_module 和 ngx_http_map_module 两个工具模块即可搞定。

查看是否具有该功能 

./configure --help |grep http_limit_req_module

./configure --help |grep http_geo_module

./configure --help |grep http_map_module

在 nginx.conf 的 http 部分中配置白名单:

geo $limit {
   default 1;
   39.100.243.125 0;
   192.168.0.0/24 0;
   172.20.0.35 0;
}
map limit limit_key {
   0 "";
   1 $binary_remote_addr;
}
limit_req_zone $limit_key
zone=myRateLimit:10m rate=10r/s;

 参数:

  • geo 对于白名单(子网或IP都可以) 将返回0,其他IP将返回1。
  • map 将limit转换为 limit_key,如果是 $limit 是0(白名单),则返回空字符串;如果是1,则返 回客户端实际IP。
  • limit_req_zone 限流的key不再使用 binary_remote_addr,而是limit_key 来动态获取值。 如果是白名单,limit_req_zone 的限流key则为空字符串,将不会限流;若不是白名单,将会 对客户端真实IP进行限流。

实时效果反馈

1. Nginx实现限流,limit_req_zone指令中rate=1r/s参数意思是 ____。

A 每秒1次

B 每分1次

C 每秒20次

D 每分20次 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速排序的三路划分方法和归并排序的递归和非递归实现

目录 快速排序的三路划分方法 归并排序的递归实现 归并排序的非递归实现 快速排序的三路划分方法 首先快排的时间复杂度为O(N*logN),空间复杂度O(logN),不稳定。 三路划分:将数据分为三份;可以提高当数据中出现多个重复数字时的效率。 …

青岛大学_王卓老师【数据结构与算法】Week04_03_双向链表_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

2022(特等奖)C2592儿童安全监护与救援指挥系统

作品介绍 1 需求分析 现如今人口拐卖犯罪已成为世界上增长最快、最有利可图的犯罪之一,年利润仅次于毒品和军火,其中儿童拐卖犯罪最为引人注目,且被拐数量惊人,已成为国际社会共同关注的问题。2021年4月,国务院发布了…

Kafka入门, 消费者工作流程

kafka消费方式 pull(拉)模式: consumer采用从broker中主动拉取数据。 Kafka采用这种方式。 push(推)模式: Kafka没有采用这种方式,因为由broker决定消息发送速率,很难适应所有消费者的速率。例如推送速度是50m/s,consu…

云原生时代,如何通过 KubeSphere x 极狐GitLab 构建安全应用?

本文整理自云原生 Meetup 杭州站上,极狐(GitLab) DevOps 技术布道师马景贺的演讲。 当听到云原生的时候,你会想起什么? 可能很多人很自然地就会想到 Kubernetes、容器、微服务、开源等等,这些关键词是我们接触云原生绕不开的话题。…

CleanMyMac X4.13中文版mac电脑优化加速工具

CleanMyMac X 可以卸掉系统的额外负担 让您的电脑明显提速 不要再因为运行缓慢的 Mac 而拖慢您的效率。CleanMyMac X已经正式发布,作为最新的系统清理和应用管理软件,可以让用户一键智能化清理Mac电脑,自动扫描Mac上的所有文件,包…

Day44

思维导图 练习 全局变量,int monster 10000;定义英雄类hero,受保护的属性string name,int hp,int attck;公有的无参构造,有参构造,虚成员函数 void Atk(){blood-0;},法师类继承自英雄类&#…

【操作系统】一些重要的概念

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

敏捷开发SCRUM工具

目录 1 Scurm开发工具1.1 白板1.2 PingCode1.3 VersionOne1.4 Atlassian Jira 2 PingCode进行Scurm开发2.1 角色管理2.2 创建敏捷项目2.3 需求管理2.4 迭代2.5 版本管理 1 Scurm开发工具 1.1 白板 上面我们说了Scurm框架的操作流程&#xff0c;下面我们看下支持Scurm开发框架的…

SpringBoot3【③ 数据访问】

整合SSM场景 SpringBoot 整合 Spring、SpringMVC、MyBatis 进行数据访问场景开发 1. 创建SSM整合项目 勾选的情况下会导入这些包 <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency><groupId>…

JMeter进行websocket测试

在做websocket性能测试的时候找了几个测试工具都暂时没有对websocket的支持&#xff0c;发现jmeter好像对websockect支持。但是使用jmeter时需要安装插件&#xff0c;下面一起看一下。 jmeter下载安装&#xff1a; 官网下载 https://jmeter.apache.org/download_jmeter.cgi 也…

【Java用法】Java在Linux下获取当前程序路径以及在Windows下获取当前路径对比

Java在Linux下获取当前程序路径以及在Windows下获取当前路径对比 log.info("分隔符&#xff1a;File.separator[{}]", File.separator); log.info("用户主目录&#xff1a;user.home[{}]", System.getProperties().getProperty("user.home")); l…

(模拟) 31. 下一个排列——【Leetcode每日一题】

❓ 31. 下一个排列 难度&#xff1a;中等 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的…

loki 的memberlist查看

本文来自&#xff1a;loki 的memberlist查看 | 老五笔记 loki作为目前比较 通用的日志类数据管理软件&#xff0c;使用起来具有一定的门槛。loki既可以支持单机版使用&#xff0c;也可以为了应对大规模数据而采用集群模式进行部署。 而在集群模式下&#xff0c;需要在配置文件…

You need to use a Theme.AppCompat theme (or descendant) with this activity

You need to use a Theme.AppCompat theme (or descendant) with this activity 最近使用Android Studio新建了个 Jetpack Compose项目&#xff0c;但创建java Activity时报错“You need to use a Theme.AppCompat theme (or descendant) with this activity”。 两种解决办法…

ipad可以用别的品牌的手写笔吗?ipad专用笔替代品

要知道&#xff0c;这款正版苹果的电容笔&#xff0c;单单一支价格都要接近上千元。事实上&#xff0c;对于那些没有很多预算的人来说&#xff0c;平替电容笔是一个很好的选择。一支苹果原装的电容笔&#xff0c;价格是平替电容笔的四倍&#xff0c;但这种平替电容笔&#xff0…

Uniapp开发的开源盲盒系统源码

最近比较火的盲盒系统&#xff0c;该项目是基于uniapp开发的盲盒项目&#xff0c;有需要的朋友可以联系我&#xff0c;运营级的项目&#xff0c;本次开源的是uniapp前端模板&#xff0c;选用技术为JAVA&#xff0c;采用框架&#xff1a;spring bootmybatisvue开发。 通过node安…

day2 QT按钮与容器

目录 按钮 1、QPushButton 2、QToolButton 3、QRadioButton 4、QCheckBox 示例 容器 ​编辑 1. QGroupBox&#xff08;分组框&#xff09; 2. QScrollArea&#xff08;滚动区域&#xff09; 3. QToolBox&#xff08;工具箱&#xff09; 4. QTabWidget&#xff08;选…

LLaMA

LLaMA 1&#xff0c;llama 参数范围7B 13B 33B 65B 在万亿token上训练的模型&#xff0c; 2,研究重点 研究表明&#xff0c;最好的模型性能不是由最大的模型体积实现&#xff0c;而是在更多的数据上训练较小的模型实现 工作重点是通过使用比通常更多的token&#xff0c;训练一系…

05-Redis初步使用

关系型数据的ACID特性:事务的四大特性:原子性,一致性,隔离性,持久性 关系型数据库应对的三高问题:高并发,高效率,高扩展 关系型数据库和非关系型数据库 关系型数据库的数据存储在表中,无法应对陡增的数据 非关系型数据库使用键值对的方式进行存储数据:redis可以用作缓存 r…