nginx主要功能及其原理介绍

在学习nginx之前首先了解一下什么是同步与异步,什么是阻塞与非阻塞。

一、同步与异步

同步与异步的重点在消息通知的方式上,也就是调用结果的通知方式不同。

同步:当一个同步调用发出去后,调用者要一直等待调用的结果通知后,才能进行后续的操作。

异步:当一个异步调用发出去后,调用者不必一直等待调用结果的返回,异步调用,要想获得结果,一般有两种方式:

1.主动轮询异步调用的结果;

2.被调用方通过callback(回调通知)来通知调用方调用结果。

nginx主要功能及其原理介绍_第1张图片

二、阻塞与非阻塞

阻塞与非阻塞的重点在于进/线程等待消息时候的行为,也就是在等待消息的时候,当前进/线程是挂起状态,还是非挂起状态。

阻塞:调用在发出去后,在消息返回之前,当先/进程会被挂起,知道有消息返回,当前进/线程才会被激活。

非阻塞:调用在发出去后,不会阻塞当前进/线程,而会立即返回。

 四种组合方式:(粗体为常用组合)

同步阻塞:小明收到消息后,啥都不干,等快递;(apache默认工作模式)

同步非阻塞:小明收到消息后,边刷着微博,边等着取快递;

异步阻塞:小明收到消息后,啥都不干,一直等着快递员通知他去快递;

异步非阻塞:小明收到消息后,边刷着微博,边等着快递员通知他取快递。(nginx默认工作模式)

大部分程序的I/O模型都是同步阻塞的,单个进程每次只在一个文件描述符上执行I/O操作,每次I/O系统调用都会阻塞,直到完成数据传输。传统服务器采用的就是同步阻塞的多进程模型。一个server采用一个进程负责一个request的方式,一个进程负责一个request,直到会话结束。进程数就是并发数,而操作系统支持的进程数就是有限的,且进程数越多,调度的开销也越大,因此无法面对高并发。

Nginx采用了异步非阻塞的工作方式。

epoll模型:

当连接有I/O事件产生的时候,epoll就会告诉进程那个连接有I/O事件产生,然后进程就去处理这个事件。

例如:小明家楼下有一个收发室,每次有快递到了,门卫就先接受并做了标记:然后通知小明去取送给小明的快递。

为什么Nginx比其他web服务器并发高(Nginx工作原理):

Nginx配置use epoll 后,以异步非阻塞方式工作,能轻松处理百万级的并发连接。

处理过程:每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到可能发生阻塞地方。比如向后端服务器转发request,并等待请求返回。那么,这个处理的worker不会这么傻等着,他会再发送完请求后,注册一个事件:“如果后端服务器返回了,告诉我一声,我在接着干”。于是他就休息去了。此时,如果再有新的request进来,他就可以很快再按这种处理方式。而一旦后端服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。通过这种快速处理,快速释放请求的方式,达到同样的配置可以处理更大并发量的目的。

三、Nginx详解

    1.概述

            Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

             Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。其特点是占有内存少,并发能力强。

2.工作模式

nginx有两种工作模式:master-worker模式和单进程模式。在master-worker模式下,有一个master进程和至少一个的worker进程,单进程模式顾名思义只有一个进程。这两种模式有各自的的特点和适用场景。

master-worker:

该模式下,nginx启动成功后,会有一个master进程和至少一个的worker进程。master进程负责处理具体的业务逻辑,也就是说,对外部来说 ,真正提供服务的是worker进程。生产环境下一般使用这种模式,因为这种模式有以下优点:

1.稳定性高,只要还有worker进程存活,就能提供服务,并且一个worker进程挂掉master进程会立即启动一个进的worker进程,保证worker进程数量不变,减低服务中断的概率。

2.配合linux的cpu亲和性配置,可以充分利用多核cpu的优势,提升性能

3.处理信号/配置重新加载/升级时可以做到尽可能减少或者不中断服务(热重启)

单进程模式:

单进程模式下,nginx启动后只有一个进程,nginx的所有工作都由这个进程负责。由于只有一个进程,因此可以很方便地利用gdb等工具进行调试。该模式不支持nginx的平滑升级功能,任何的信号处理都可能造成服务中断,并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。因此,该模式一般只在开发阶段和调试时使用,生产环境下不会使用。

           

你可能感兴趣的:(nginx主要功能及其原理介绍)