【web】【nginx】快速认识Nginx服务器
一、什么是Nginx
Nginx是一个轻量级、高性能的HTTP和反向代理web服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器
二、Nginx为什么存在
相对于大众熟悉的Apache服务器,也是web服务器,使用的也比较广泛,Nginx为什么能存活呢?主要有以下方面:
(1)并发量:Apache服务器因为使用的进程模式而不适合大规模系统,经受不住高并发量
(2)性能稳定性:其他的HTTP服务器稳定性不够强,会因连接数的峰值而变得缓慢,甚至失去响应,重启服务器
三、Nginx的特点
(1)处理静态文件,索引文件以及自动索引;打开文件描述符缓冲
(2)无缓存的反向代理加速
(3)FastCGI,简单的负载均衡和容错
(4)模块化的结构,模块拓展方便
(5)支持 SSL 和 TLSSNI
(6)支持热部署
(7)性能稳定性强,支持高并发,占用内存小;支持内核poll模型
(8)采用master-slave模型,I/O阻塞延迟小
四、基本架构及工作原理
1、基本架构
nginx 是由一个 master 管理进程,多个 worker 进程处理工作的多进程模型。
master 负责管理 worker 进程,worker 进程负责处理网络事件。整个框架被设计为一种依赖事件驱动、异步、非阻塞的模式。
如此设计的优点:
- 1.可以充分利用多核机器,增强并发处理能力。
- 2.多 worker 间可以实现负载均衡。
- 3.Master 监控并统一管理 worker 行为。在 worker 异常后,可以主动拉起 worker 进程,从而提升了系统的可靠性。并且由 Master 进程控制服务运行中的程序升级、配置项修改等操作,从而增强了整体的动态可扩展与热更的能力。
2、工作原理
Nginx采用多进程和多线程的工作模式(进程模型和事件模型),默认就是多进程工作模式。
1)Nginx的多进程模式(进程模型):
是指一个master进程和多个worker进程,master进程管理worker进程,多个worker进程相互之间是独立的、对等的,他们同等竞争客户端的请求,一个请求只能由一个worker进程处理;worker进程的个数是可以设置的,一般设置worker个数与cpu的核数一致而不必要去竞争cpu资源,减少cpu间的上下文切换。
其工作方式是:
当一个连接请求进来,master进程fork创建worker进程,并建立listen的socket(注册listenfd读事件),为了保证一个请求只有一个worker进程在处理,在所有worker进程注册listenfd读事件之前都可以去抢占accept_mutex互斥锁,抢到该互斥锁的worker进程就开始注册lisenfd读事件,并在读事件中调用accept方法接受该请求连接,当这个worker进程在accept这个连接之后,就开始读取请求、解析请求、处理请求、响应请求,返回给客户端连接,最后断开连接。
其好处是:
(1)每个worker进程都是独立进程,不需要加锁,减少了锁带来的开销。
(2)独立worker进程,相互之间不会影响,一个worker进程退出后,其他worker进程还在工作,服务不会中断,master可以快速启动一个新的worker进程,降低风险。
2)Nginx的多线程模式(事件模型)
Nginx采用的是异步非阻塞的方式来处理请求的,也就是说在一个worker进程中,可以同时处理成千上万个请求,并不是同时并行处理多个请求,只有一个进程,同一时间只能处理一个请求,只是并发请求的时候,不断的切换未处理完的请求,切换也是因为异步事件还没有准备好,而主动让出来给其他的请求,这里的切换是没有任何代价的,可以充分的利用cpu的资源,占用的内存也很小。可以理解为循环处理多个准备好的事件。这就是Nginx高性能的原因。
Nginx事件包括有:
(1)网络事件:就是上面所说的异步非阻塞方式处理的请求事件
(2)信号:这种信号只要是Nginx在工作中的特殊处理,这些信号会中断程序当前的运行,在改变状态后,继续执行。
(3)定时器:在网络事件没有准备好的时候可以进入超时设置,在处理事件的回调函数时,通常做的第一件事情就是判断超时,然后在去处理网络事件。
- 点赞
- 收藏
- 关注作者
评论(0)