nginx 的进程模型
nginx使用的是信号量驱动I/O模型
什么是fork
什么是fork?fork是复制进程的函数,程序开始运行时会产生一个进程,当这个进程(代码)执行到fork()时,就会通过复制当前进程(包括代码、数据等)来创建一个新进程,我们称之为子进程,而当前被复制的进程我们称之为父进程,此时父子进程是共存的,他们一起向下执行代码。除了少部分内容(比如进程ID),子进程和父进程几乎完全相同,可以做完全相同的事情,当然,如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
nginx 是如何实现高并发的
如果一个 server 采用一个进程(或者线程)负责一个 request 的方式,那么进 程数就是并发数。那么显而易见的,就是会有很多进程在等待中。等什么?最多的应该是等待网络传输。
而 Nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的 时候,这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的 并发问题。
Nginx 不这样,每进来一个 request ,会有一个 worker 进程去处理。但不 是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游 (后端)服务器转发 request ,并等待请求返回。那么,这个处理的 worker 不会这么傻等着,他会在发送完请求后,注册一个事件:“如果 upstream 返 回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有 request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了, 就会触发这个事件,worker 才会来接手,这个 request 才会接着往下走。 这就是为什么说,Nginx 基于事件模型。
由于 web server 的工作性质决定了每个 request 的大部份生命都是在网络 传输中,实际上花费在 server 机器上的时间片不多。这是几个进程就解决高 并发的秘密所在。即: webserver 刚好属于网络 IO 密集型应用,不算是计算密集型。异步,非阻 塞,使用 epol- ,和大量细节处的优化,也正是 Nginx 之所以然的技术基 石。
Nginx 服务器上的 Master 和 Worker 进程分别是什么?
Master 进程:读取及评估配置和维持 ;Worker 进程:处理请求。
nginx的热部署原理
- 重新加载配置文件
- 启动新的worker进程,并向所有老的worker进程发送信号,告诉他们可以光荣退休了。
- 新的worker在启动后,就开始接收新的请求,而老的worker进程在收到来自master的信号后,不再接收新的请求,并继续处理当前进程已接收的请求直至所有请求处理完成,最后退出。
nginx 的优缺点
优点:
- 占内存小,可实现高并发连接,处理响应快。
- 可实现 HTTP 服务器、虚拟主机、方向代理、负载均衡。 - Nginx 配置简单。
- 可以不暴露正式的服务器 IP 地址。
缺点:
- 动态处理差,nginx 处理静态文件好,耗费内存少,但是处理动态页面则很鸡 肋,现在一般前端用 nginx 作为反向代理抗住压力。