Nginx 为什么这么快!

2022-12-18 程序员资讯 0 736
¥ 2.88B

包年VIP免费升级包年VIP

开通VIP尊享优惠特权
立即下载 升级会员

Nginx 为什么这么快!

https://reurl.cc/7yV2bl

Nginx 为什么这么快!

Nginx 是两个完全免费的,开放源码的,高效能的 HTTP 伺服器和逆向全权,和 IMAP / POP3 全权伺服器。Nginx 以其高效能,灵活性,多样的功能,单纯的实用性和低天然资源耗用而闻名于世。责任编辑从下层基本原理预测 Nginx 为何那么快!

基本概念

Nginx 的民主化数学模型Nginx 为什么这么快!Nginx 伺服器,恒定运转操作过程中:多民主化:两个 Master 民主化、数个 Worker 民主化Master 民主化:管理工作 Worker 民主化1.对内USB:转交内部的操作方式(讯号)2.Deoria转贴:依照内部的操作方式的相同,透过讯号管理工作 Worker3.监视:监视 worker 民主化的运转状况,worker 民主化极度中止后,手动重新启动 worker 民主化Worker 民主化:大部份 Worker 民主化都是公平的1.前述处置:互联网允诺,由 Worker 民主化处置2.Worker 民主化数目:在 nginx.conf 中实用性,通常增设为核心理念数,充分运用 CPU 天然资源,与此同时,防止民主化数目过多,防止民主化市场竞争 CPU 天然资源,减少语句转换的耗损。思索:1.允诺是相连到 Nginx,Master 民主化负责管理处置和转贴?2.如何选定哪个 Worker 民主化处置允诺?允诺的处置结果,是否还要经过 Master 民主化?Nginx 为什么这么快!HTTP 相连建立和允诺处置操作过程:Nginx 启动时,Master 民主化,加载实用性文件Master 进程,初始化监听的 socketMaster 民主化,fork 出数个 Worker 民主化Worker 民主化,市场竞争新的相连,获胜方透过三次握手,建立 Socket 相连,并处置允诺Nginx 高效能、高并发:Nginx 采用:多民主化 + 异步非阻塞方式(IO 多路复用 epoll)允诺的完整操作过程:1.建立相连2.读取允诺:解析允诺3.处置允诺4.响应允诺允诺的完整操作过程,对应到下层,就是:读写 socket 事件

Nginx 的事件处置数学模型

request:Nginx 中 http 允诺。基本的 HTTP Web Server 工作模式:1.转交允诺:逐行读取允诺行允诺头,判断段有允诺体后,读取允诺体2.处理允诺3.返回响应:依照处置结果,生成相应的 HTTP 允诺(响应行响应头响应体Nginx 也是这个套路,整体流程一致。Nginx 为什么这么快!模块化体系结构Nginx 为什么这么快!nginx的模块依照其机能基本上可以分为以下几种类型:event module: 搭建了独立于操作方式系统的事件处置机制的框架,及提供了各具体事件的处置。包括ngx_events_module, ngx_event_core_module和ngx_epoll_module等。nginx具体使用何种事件处置模块,这依赖于具体的操作方式系统和编译选项。phase handler: 此类型的模块也被直接称为handler模块。主要负责管理处置客户端允诺并产生待响应内容,比如ngx_http_static_module模块,负责管理客户端的静态页面允诺处置并将对应的磁盘文件准备为响应内容输出。output filter: 也称为filter模块,主要是负责管理对输出的内容进行处置,可以对输出进行修改。例如,可以实现对输出的大部份html页面减少预定义的footbar一类的工作,或者对输出的图片的URL进行替换之类的工作。upstream: upstream模块实现逆向全权的机能,将真正的允诺转贴到后端伺服器上,并从后端伺服器上读取响应,发回客户端。upstream模块是一种特殊的handler,只不过响应内容不是真正由自己产生的,而是从后端伺服器上读取的。load-balancer: 负载均衡模块,实现特定的算法,在众多的后端伺服器中,选择两个伺服器出来作为某个允诺的转贴伺服器。

常见问题剖析

Nginx vs. Apache

nginx:IO 多路复用,epoll(freebsd 上是 kqueue )高效能高并发占用系统天然资源少apache:阻塞 + 多民主化/多线程更稳定,bug 少模块更多样参考:http://www.oschina.net/translate/nginx-vs-apachehttps://www.zhihu.com/question/19571087场景:处置数个允诺时,可以采用:IO 多路复用 或者 阻塞 IO +多线程1.IO 多路服用两个线程,跟踪数个 socket 状况,哪个就绪,就读写哪个;2.阻塞 IO + 多线程:每两个允诺,新建两个服务线程思索IO 多路复用 和 多线程 的适用场景?IO 多路复用:单个相连的允诺处置速度没有优势,适合 IO 密集型 场景,事件驱动大并发量:只使用两个线程,处置大量的并发允诺,降低语句环境转换耗损,也不需要考虑并发问题,相对可以处置更多的允诺;耗用更少的系统天然资源(不需要线程调度开销适用于长相连的情况(多线程模式长相连容易造成线程过多,造成频繁调度阻塞IO + 多线程:实现单纯,可以不依赖系统调用,适合 CPU 密集型 场景每个线程,都需要时间和空间;线程数目增长时,线程调度开销指数增长Nginx 最大相连数基础背景:Nginx 是多民主化数学模型,Worker 民主化用于处置允诺;单个民主化的相连数(文件描述符 fd),有上限(nofile):ulimit -nNginx 上实用性单个 worker 民主化的最大连接数:worker_connections 上限为 nofileNginx 上实用性 worker 民主化的数目:worker_processes因此,Nginx 的最大相连数:Nginx 的最大相连数:Worker 民主化数目 x 单个 Worker 民主化的最大相连数上面是 Nginx 作为通用伺服器时,最大的相连数Nginx 作为逆向全权伺服器时,能够服务的最大相连数:(Worker 民主化数目 x 单个 Worker 民主化的最大相连数)/ 2。Nginx 逆向全权时,会建立 Client 的相连后端 Web Server 的相连,占用 2 个相连思索:1.每打开两个 socket 占用两个 fd2.为何,两个民主化能够打开的 fd 数目有限制?

附     录

HTTP 允诺和响应

HTTP 允诺:允诺行:methodurihttp version允诺头允诺体HTTP 响应:响应行:http versionstatus code响应头响应体

IO 数学模型

场景:处置数个允诺时,可以采用:IO 多路复用 或者 阻塞 IO +多线程1.IO 多路服用两个线程,跟踪数个 socket 状况,哪个就绪,就读写哪个;2.阻塞 IO + 多线程:每两个允诺,新建两个服务线程思索:IO 多路复用 和 多线程 的适用场景?IO 多路复用:单个相连的允诺处置速度没有优势1.大并发量:只使用两个线程,处置大量的并发允诺,降低语句环境转换耗损,也不需要考虑并发问题,相对可以处置更多的允诺;2.耗用更少的系统天然资源(不需要线程调度开销3.适用于长相连的情况(多线程模式长相连容易造成线程过多,造成频繁调度阻塞IO + 多线程:实现单纯,可以不依赖系统调用。1.每个线程,都需要时间和空间;2.线程数目增长时,线程调度开销指数增长select/poll 和 epoll 比较详细内容,参考:select poll epoll三者之间的比较select/poll 系统调用:// select 系统调用intselect(intmaxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);// poll 系统调用int poll(struct pollfd fds[], nfds_t nfds, int timeout);

select:

查询 fd_set 中,是否有就绪的 fd,可以设定两个超时时间,当有 fd(File descripter)就绪或超时返回。fd_set 是两个位集合,大小是在编译内核时的常量,默认大小为 1024。特点:相连数限制,fd_set 可表示的 fd 数目太小了;线性扫描:判断 fd 是否就绪,需要遍历一边 fd_set;数据复制:用户空间和内核空间,复制相连就绪状况信息。

poll:

解决了相连数限制:poll 中将 select 中的 fd_set 替换成了两个 pollfd 数组,解决 fd 数目过小的问题。数据复制:用户空间和内核空间,复制相连就绪状况信息。

epoll,event 事件驱动:

事件机制:避免线性扫描,为每个 fd,注册两个监听事件,fd 变更为就绪时,将 fd 添加到就绪链表。fd 数目:无限制(OS 级别的限制,单个民主化能打开多少个 fd)。

select,poll,epoll:

I/O 多路复用的机制。I/O 多路复用就透过一种机制,可以监视数个描述符,一旦某个描述符就绪(通常是读就绪或者写就绪),能够通知程序进行相应的读写操作方式;监视数个文件描述符。但 select,poll,epoll 本质上都是同步 I/O:用户民主化负责管理读写(从内核空间拷贝到用户空间),读写操作过程中,用户民主化是阻塞的;异步 IO,无需用户民主化负责管理读写,异步 IO,会负责管理从内核空间拷贝到用户空间。

Nginx 的并发处置能力

关于 Nginx 的并发处置能力:并发相连数,通常优化后,峰值能保持在 1~3w 左右。(内存和 CPU 核心理念数相同,会有进一步优化空间)

END

官方站点:www.linuxprobe.com

Linux命令大全:www.linuxcool.com

刘遄老师QQ:5604922

Linux技术交流群:193666693

(新群,火热加群中……)

想要学习Linux系统的读者可以点击按钮来了解书籍《Linux就该那么学》,与此同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!

资源下载此资源下载价格为2.88B,包年VIP免费,请先
2405474279

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务