Nginx与LUA(3)

news2024/10/5 16:23:42

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~


在互联网应用中,很多场景都会涉及到高并发请求,如果不对这些请求做限制,那么服务器很快就会被挤垮。就像在12306买票一样,如果全国人民都去抢票,服务器是无论如何也扛不住压力的。

这是非常现实的而且也是必须要解决的问题。

其实,除了反向代理和负载均衡,网络限流也是Nginx的拿手好戏。

常用于实现网络限流的两类算法有:

1、令牌桶;

2、漏桶。

而Nginx实现限流的两种方式是:

1、限制访问频率,就是限制指定时间内每个用户的访问次数;

2、限制并发连接数,就是限制某段时间内访问资源的用户数。

Nginx限流模块使用的是漏桶算法。

令牌桶限流的算法思想是:

1、令牌以固定速率产生,并缓存到令牌桶;

2、令牌桶放满时,多余的令牌将被直接丢弃;

3、请求进来时,先进入待处理的请求队列;

4、处理请求时需要从桶里拿到相应数量的令牌作为处理「凭证」;

5、当桶里没有令牌时,请求处理被拒绝。

令牌桶是一种常用于网络流量整形和速率限制的算法,只有持有令牌的请求才会被处理,这也是令牌桶名称的由来。令牌桶算法允许突发流量的存在,更适合会有突发流量的场景。

而漏桶限流的算法思想是:

水(请求)从上方进入水桶,从下方流出(被处理),来不及流出的水存在水桶中(缓冲),以固定速率流出。水桶满后水溢出(丢弃请求)。漏桶也是一种常用的整形和限速算法,其核心是缓存请求、匀速处理、多余丢弃。

正如漏桶一样,不管突然增加多少水量,底部的漏洞始终保持着匀速的出水量,这正是漏桶算法名称的由来。因此漏桶算法会屏蔽突发请求,更适合需要平滑流量的场景。

漏桶算法与令牌桶算法看起来很类似,容易弄混。实际上这两者具有截然不同的特性,应用在不同的场景中。真正区分令牌桶和漏桶最核心的特征是「变速」和「匀速」:

1、令牌桶是一种变速运动——就像高速上的汽车一样;

2、漏桶是一种匀速运动——就像铁轨上的火车一样。

这两种限流算法没有优劣好坏之分,只区分场景的适用性。

为了验证这两种县里算法,可以做一个简单的测试。ab是apachebench命令的缩写,是一款比较优秀的压测工具。在安装Nginx的机器上安装ab,如果不想安装apache但是又想使用ab命令的话,可以这样做:

yum -y install httpd-tools

cd /usr/bin

ab -V

ab的使用也很简单:

./ab -h:获取帮助

./ab -n1000 -c100 -t1 -s5 http://localhost/test?username=test1

意思是:发送1000次,每次100个并发请求到指定服务,并在1秒之内完成请求,超时时间5秒。如果只是-n100、-c10参数,只能看到总的请求次数100次,看不到并发请求环境下是否真的满足限流要求。

如果加上-t、-s参数,就能很清楚地看到限流效果。

ab测试完成后的结果可能是这个样子的:

用Nginx限制访问速率可以这样写:限制每个IP的访问速率为每秒10次。

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

server {

listen 80;

server_name localhost;

location / {

limit_req zone=case1;

}

}

ab测试命令:

./ab -n100 -c10 -t1 -s5 http://localhost/test?username=test1

./ab -n100 -c10 -t2 -s5 http://localhost/test?username=test1(多线程影响)

结果满足要求:

Complete requests:30397;Failed requests:30387

用Nginx限制突发增量可以这样写:限制每个IP的访问速率为每秒10次,有burst且直接返回。

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

server {

listen 80;

server_name localhost;

location / {

limit_req zone=case1 burst=5 nodelay;

}

}

ab测试命令:

./ab -n100 -c10 -t1 -s5 http://localhost/test?username=test1

./ab -n100 -c10 -t2 -s5 http://localhost/test?username=test1(多线程影响)

结果观察:

Complete requests:15212;Failed requests:15197

用Nginx限制并发访问:限制每个IP的并发请求为10。

limit_conn_zone $binary_remote_addr zone=case2:10m;

server {

listen 80;

server_name localhost;

location / {

limit_conn case2 10;

}

}

ab测试命令:

./ab -n100 -c10 -t1 -s5 http://localhost/test?username=test1

./ab -n100 -c11 -t1 -s5 http://localhost/test?username=test1

结果观察:

当参数为c10,所有请求全部成功;当参数为c11,出现请求失败的情况

限制并发访问:按服务名。

限制每个服务的并发请求为10

limit_conn_zone $server_name zone=case3:10m;

server {

listen 80;

server_name localhost;

location / {

limit_conn case3 10;

}

}

ab测试命令:

./ab -n100 -c10 -t1 -s5 http://localhost/test?username=test1

./ab -n100 -c11 -t1 -s5 http://localhost/test?username=test1

结果观察:

当参数为c10,所有请求全部成功;当参数为c11,出现请求失败的情况

还可以自定义返回值:配置status返回值

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

server {

listen 80;

server_name localhost;

location / {

limit_conn case1 10;

limit_req_status 599;

}

}

ab测试命令:

./ab -n100 -c10 -t1 -s5 http://localhost/test?username=test1

ab看不到效果,需要用其他更专业测试工具,比如Postman。


感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

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

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

相关文章

计算机图形学实习教程之基本图形的生成(扫描线填充算法+图形缩放算法+对称变换算法+消隐算法+金刚石图案算法),利用C#实现,附源码

环境:Win10Visual Studio 2022 Community 在本次实验中需要用到第一篇文章实验内容的代码及环境,详情请见:传送门 目录 一、实验目的 二、实验步骤 1.扫描线填充算法 2.图形的缩放算法 3.对称变换算法 4.消隐算法 5.金刚石图形算法 一…

Unity 3D 人形角色动画(Avatar)||Unity 3D 导航系统||Unity 3D 障碍物

Unity 3D 人形角色动画(Avatar) Mecanim 动画系统适合人形角色动画的制作,人形骨架是在游戏中普遍采用的一种骨架结构。。 由于人形骨架在骨骼结构上的相似性,用户可以将动画效果从一个人形骨架映射到另一个人形骨架&#xff0c…

基于Java+SpringBoot+Vue求职招聘系统设计与实现

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供毕业项目实战✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注…

《Buildozer打包实战指南》第一节 在虚拟机中安装Ubuntu系统

目录 1.1 下载并安装Virtual Box虚拟机 1.2 下载并安装Ubuntu系统 由于Buildozer不能在Windows系统上打包,只能运行于Linux,所以我们可以在Windows系统上安装一个虚拟机,并在虚拟机中安装Linux。在本教程中笔者将会一直使用Ubuntu系统&…

大数据分案例-基于随机森林算法构建返乡人群预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

ubuntu16.04安装verilator+systemc并运行测试程序

link Verilator 能够把可综合的(通常不是行为级)的Verilog代码,外加一部分Synthesis,SystemVerilog和一小部分Verilog AMS代码转换成C或者SystemC代码。Verilator不是一个完整的模拟器(simulator)&#xff…

打工人必学的法律知识(六)——《劳动法》案例-差绩效不等于「不能胜任工作」

目录 一、差绩效不等于「不能胜任工作」 二、劳动者无条件解除劳动合同的情形 一、差绩效不等于「不能胜任工作」 员工在用人单位等级考核中居于末位等次,不等同于“不能胜任工作”(最高人民法院指导案例18号) 2005年7月,被告王…

【Linux】Linux多线程(上)

前言 hi~ 大家好呀,欢迎来到我的Linux学习笔记。本篇笔记将会重点从内核结构引入Linux下的线程,理解Linux下线程和进程的相关性和区别,以及线程相关的操作方法,在到之后的线程互斥和线程同步中的条件变量相关概念哦~ Linux进程控…

世界杯数据可视化分析

目录 1.数据来源 2.字段解释 世界杯成绩信息表:WorldCupsSummary 世界杯比赛比分汇总表:WorldCupMatches.csv 世界杯球员信息表:WorldCupPlayers.csv 3.数据分析及可视化 世界杯已经告一段落,作为一个学习大数据的学生&…

CentOS即将停止维护,拥抱阿里“龙蜥“(Anolis OS),VMware安装Anolis OS与介绍

一、前言 大家在自己电脑来进行服务器的一些操作时,基本都是使用CentOS 7或者是CentOS 8,但是2021年底CentOS 8宣布停止了维护;CentOS 7 在2024年6月30日也会停止维护! 所以我们是时候换一个操作系统了,经过十几年的…

[319]. 灯泡开关

[319]. 灯泡开关题目算法设计:完全平方数题目 传送门:https://leetcode.cn/problems/bulb-switcher/ 算法设计:完全平方数 问题是有多少灯是亮的。 那怎么样灯才会亮呢? 点偶数次相当于没点,开了又关。只有点奇…

标准库中的string类

深爱学习的你,在很多场景下一定经常和字符串打交道! 字符串是以‘\0’结尾的字符合集,C语言中提供了一些库函数来处理字符串,让大家在写代码的过程中方便了许多: 字符串函数_Bug程序员小张的博客-CSDN博客字符串函数https://blog…

基于Simulink的带通BPSK信号调制解调实验报告(含代码和slx文件)

重要声明:为防止爬虫和盗版贩卖,文章中的核心代码和数据集可凭【CSDN订阅截图或公z号付费截图】私信免费领取,一律不认其他渠道付费截图! 摘要 数字相位调制又称为相移键控(Phase Shift Keying,PSK),是一种十分重要的基本数字调制技术,是一种用载波相位表示输入信号…

磨金石教育摄影技能干货分享|有哪些风格独特的摄影作品

1 奋勇向前照片中退却的海浪与冲上岸的海浪交汇拍打,形成大量的白色泡沫。于是画面被平均分成两部分,分割线由左上延伸到右下,一条明显的对角线。也让画面形成对称式的构图,所以照片看着既平衡又美观。作者给照片起名为《奋勇向前…

Docker安装MySQL、MySQL主从复制、双主双从

文章目录Docker安装MySQL新建容器配置,记得 重启加载配置!测试MySQL 主从复制原理新增两个mysql,一主一从在主机上在从机上MySQL双主双从必看!创建容器在两个主机上在两个从机上问题解决Navicat无法连接MySQL的问题WARNING: IPv4 forwarding is disabled…

计算机网络概况

1 前言计算机网络是指将位于不同地理位置,但具有独立功能的多台设备,通过通信设备和线路连接起来,在网络操作系统,网络管理软件、网络通信协议的协调管理下,实现资源共享和信息传递的计算机系统。简单来说,…

智慧农业灌溉系统-数字农业-农业物联网机井灌溉节水新模式

平升电子智慧农业灌溉系统/农业物联网机井灌溉系统,可实现井电双控(以电控水)、以电折水、以阀控水等各种形式的地下取水井用水计量监测控制需求,助推农业水价改革实施、高效节水灌溉和地下水超采综合治理,促进节水型社…

Python数学建模问题总结(2)数据可视化Cookbook指南·上

概括总结:一、可视化问题1.不会可视化图标;2.可视化效果不好看;3.数据可视化成果无法得到很好的推广使用。二、可视化原则准确的、有帮助的、可扩展的。三、类型1.随时间变化;2.类别比较图表;3.排名列表:有…

proc文件系统下各参数解析

文章目录一、proc文件系统1.1 /proc/[pid]1.1.1 /proc/[pid]/arch_status1.1.2 /proc/[pid]/attr1.1.2.1 /proc/[pid]/attr/current1.1.2.2 /proc/[pid]/attr/exec1.1.2.3 /proc/[pid]/attr/fscreate1.1.2.4 /proc/[pid]/attr/keycreate1.1.2.5 /proc/[pid]/attr/prev1.1.2.6 /…

【操作系统】 第一章 操作系统概述

文章目录第一章 知识体系1.1 操作系统的基本概念1.1.1 操作系统的概念1.1.2 操作系统的特征1.1.3 操作系统的目标和功能1.2 操作系统的发展历程1.3 操作系统的运行环境1.3.1 处理器的运行模式1.3.2 中断和异常的概念1.3.3 系统调用1.4 操作系统结构1.5 操作系统引导1.6 虚拟机第…