Apache与Nginx对客户端请求的处理机制对比
Apache与Nginx对客户端请求的处理机制对比
模块
- 大致为四个模块,核心模块、HTTP模块、邮件模块,以及第三方模块
- 核心模块主要包含两类功能的支持,一类是主体功能,包括进程管理,权限管理,错误日志分析,配置解析。另一类是用于响应请求事件必须的功能,包括事件驱动机制,正则表达式。
APache对客户端请求的处理机制
web-server与client是一对多关系,apache完成并行处理的工作方式如下三种:
多进程方式
服务器收到一个请求,其主进程生成一个子进程来处理请求,处理完毕,进程结束。
为了应对大量请求,apache采用预派生进程的机制来对多进程进行改进。预进程机制就是在请求没到达之前就预先生成好,当请求来的时候主进程分配一个进程与客户端进行交互,交互完成之后,该进程也不结束,而被主进程管理起来等待下一个客户请求的到来。多线程方式
服务器主进程派生一个线程和客户端进行交互。服务器生成一个线程的开销远比进程的开销小,多个线程共享主进程管理的资源。
异步方式
发送方在发送一个请求之后,不等待接收方响应这个请求,就继续发送下一个请求,在异步机制中,所有来自发送方的请求形成一个队列,接收方处理完之后才通知发送方。
同步机制:发送方发送一个请求之后,等待接收方响应这个请求,再继续发送下一个请求。
Nginx对客户端请求的处理机制
Nginx服务器能同时处理大量的请求,结合了多进程机制和异步非阻塞机制。
Nginx服务器启动之后,可以产生一个主进程和多个work进程。Nginx服务器的所有进程用于接收客户端请求,类似与apache的多进程机制,预先派出工作进制,等待客户端请求。
每个work进程使用异步非阻塞方式,可以处理多个客户端的请求。当某个IO请求不能立即得到结果的时候就去处理其他的请求,而客户端在此期间也不需要等待,可以去处理其他的请求,当IO调用返回结果的时候就会通知此work进程,该进程得到通知,暂时挂起当前事务去响应客户端要求。
Nginx的事件驱动模型
IO调用结果如何把自己的状态告诉进程,两种方案
- work进程过一段时间就去检查一下IO的运行状态,完成则响应,未完成则继续工作。
- IO调用完之后主动通知work进程
select
、poll
、epoll
三种事件驱动模型属于上述的第二种方式
select
- 创建事件的描述符集合,对于一个事件,关注其上面的读事件、写事件和异常事件,创建三类事件的描述符集合,分别用来收集三种类型的描述符。
- 其次调用底层select()函数,等待事件发生,轮询所有时间描述符中的每一个描述符,检查是否有事件发生,有则处理,无则继续监听
poll
- poll和select方式相同,创建描述符的集合,等待事件发生,轮询描述符集合,检查有没有事件发生
- poll与select的区别在于:select需要为读事件、写事件、异常事件分别创建一个描述符集合,轮询三个集合,而poll库只需要创建一个集合,而每个描述符上面对应的结构分别设置为读事件或写事件或异常事件,轮询一个集合,同时检查这三个事件是否发生。
epoll
- select和poll都是创建一个待处理的事件列表,然后将列表发给内核,返回时,再去轮询这个列表,来判断是否有事件发生,效率低下。比较好的做法是把描述符列表的管理交给内核负责,一旦有某种事件发生,内核把发生事件的描述符通知给进程,避免轮询整个描述符列表。
- epoll就是上述做法。通过相关调用通知内核创建一个有N个描述符的列表,给这些描述符设置所关注的事件,并把它添加到内核的事件列表中去,在具体编码过程中也可以通过相关调用删除列表中的描述符。
完成设置之后,epoll就开始等待内核通知事件,某一事件发生以后,内核就将发生事件的描述符传给epoll,得知事件列表的epoll库,就可以开始进行事件处理了。
epoll的高效在于它支持一个进程打开大数目的事件描述符,上限是系统可以打开的文件的数目,同时,epoll库的IO效率不随描述符的增加而线性下降。
epoll有两种工作模式:
- 水平触发:内核通知进程来读取数据,进程没来读取数据,内核就一次一次通知进程
- 边缘触发:内核只通知一次让进程来读取数据,进程可以在超时时间内随时来读取数据
备注:这里只是简单的进行了比较和对三种驱动模型的简单介绍,后面会更新更详细的介绍,具体到函数调用
Apache与Nginx对客户端请求的处理机制对比的更多相关文章
- nginx截获客户端请求
使用nginx可以直接截获客户端请求,以下是最近收集的一些判断截获的信息的配置,为查看方便记录如下: 1.根据UA和cookie判断当前是移动端还是PC端访问: if ($http_host !~ & ...
- Nginx控制客户端请求的速率
使用ngx_http_limit_req_module模块的两个参数 ngx_http_limit_req_module模块用于限制每个IP访问每个定义key的请求速率 1.limit_req_zon ...
- 从Nginx的Web请求处理机制中剖析多进程、多线程、异步IO
Nginx服务器web请求处理机制 从设计架构来说,Nginx服务器是与众不同的.不同之处一方面体现在它的模块化设计,另一方面,也是最重要的一方面,体现在它对客户端请求的处理机制上. Web服务器和客 ...
- JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)
1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...
- 控制nginx并发链接数量和客户端请求nginx的速率
一.控制nginx并发链接数 ngx_http_limit_conn_module这个模块用于限制每个定义的key值的链接数,特别是单IP的链接数. 不是所有的链接数都会被计数,一个符合计数要求的连接 ...
- Nginx优化防爬虫 限制http请求方法 CDN网页加速 架构优化 监牢模式 控制并发量以及客户端请求速率
Nginx防爬虫优化 Robots协议(也称为爬虫协议,机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可 ...
- 给nginx添加客户端的请求最大单文件限制
在nginx.conf中添加如下. client_max_body_size 10m; #允许客户端请求的最大单文件字节数 client_body_buffer_size 128k; #缓冲区代理缓冲 ...
- 配置apache和nginx的tomcat负载均衡
概述 本篇文章主要介绍apache和nginx的相关配置,tomcat的相关安装配置我在前面有写过一篇,详细介绍通过两种配置方法配置nginx. tomcat配置参考:http://www.cnblo ...
- 关于配置并发访问的服务器apache、nginx
一. apache,nginx比较 关于Apache与Nginx的优势比较 (apache计算密集型 nginx io密集型 各有优势,不存在谁取代谁) 二.nginx 基于nginx ...
随机推荐
- 让JavaScript回归函数式编程的本质
JavaScript是一门被误会最深的语言,这话一点不假,我们看下它的发展历史. 1995年,Netscape要推向市场,需要一门脚本语言来配套它.是使用一门已有的语言,还是发明一门新的语言,这也不是 ...
- 如何在Excel中通过VBA快速查找多列重复的值
今天项目组的一个同事问我如何快速的找到一个Excel中第3列和第5列的值完全重复的值,我想了想虽然Excel中自带查找重复值的功能,但是好像只能对同一列进行比较,所以就写了一个VBA进行处理,VBA非 ...
- 76 mkswaP-用于设置交换区
Linux mkswap命令用于设置交换区(swap area). mkswap可将磁盘分区或文件设为Linux的交换区. 语法 mkswap [-cf][-v0][-v1][设备名称或文件][交换区 ...
- windows服务 定时任务
1.c#程序做成windows服务 若用cmd安装: var path = Process.GetCurrentProcess().MainModule.FileName + " s&quo ...
- spring-poi-excle往单元格写入图片
HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现 XSSF是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现 在POI中有HSSFPat ...
- Windows7微软官方原版镜像系统文件
Windows7微软官方原版镜像系统 Windows 7 是由微软公司(Microsoft)开发的操作系统,核心版本号为Windows NT 6.1.Windows 7可供家庭及 商业工作环境.笔记本 ...
- Zookeeper的安装和使用
首先在Zookeeper官网下载最新版本,下载后解压到用户目录下. tar -zxvf zookeeper-3.4.8.tar.gz 重命名conf目录下zoo_sample.cfg文件为zoo.cf ...
- javascript数据结构与算法-- 二叉树
javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...
- MySQL提示:The server quit without updating PID file问题的解决办法(转载)
MySQL提示:The server quit without updating PID file问题的解决办法 今天网站web页面提交内容到数据库,发现出错了,一直提交不了,数找了下原因,发现数据写 ...
- tyvj1938 最优战舰
描述 太空战队顺利地完成了它的第一次使命,这一行动的受益者陆军本部当即决定,请陆军的战士们投票选出最优战舰并报司令总部进行表彰.为防止有人利用高科技手段造假,陆军本部决定使用最原始的方法进行投票.可不 ...