Nginx服务器架构解析

  • 时间:2018-06-16 22:55 作者:Java高级架构技术 来源:Java高级架构技术 阅读:81
  • 扫一扫,手机访问
摘要:一.Nginx的板块化板块化结构的思想是一个很久的概念,但也正是成熟的思想造就了Nginx的巨大优越性。我们知道Nginx从总体上来讲是有许多个板块构成的。习惯将Nginx分为5大板块分别为:核心板块,标准HTTP板块,可选HTTP板块,邮件服务板块和第三方板块。这5个板块由上到下重要性一次递减。(

一.Nginx的板块化

板块化结构的思想是一个很久的概念,但也正是成熟的思想造就了Nginx的巨大优越性。

我们知道Nginx从总体上来讲是有许多个板块构成的。习惯将Nginx分为5大板块分别为:核心板块,标准HTTP板块,可选HTTP板块,邮件服务板块和第三方板块。

Nginx服务器架构解析

这5个板块由上到下重要性一次递减。

(1)核心板块;

核心板块是Nginx服务器正常运行必不可少的板块,好像操作系统的内核。它提供了Nginx最基本的核心服务。像进程管理、权限控制、错误日志记录等;

(2)标准HTTP板块;

标准HTTP板块支持标准的HTTP的功可以;

(3)可选HTTP板块;

可选HTTP板块主要使用于扩展标准的HTTP功可以,让Nginx可以解决少量特殊的服务;

(4)邮件服务板块;

邮件服务板块主要使用于支持Nginx的邮件服务;

(5)第三方板块;

第三方板块是为了扩展Nginx服务器应使用,完成开发者想要的功可以;

*******Nginx中的板块命名有自己的习惯*********

一般以Ngx_作为前缀,——module作为后缀,中间用一个或者者多个英文单词形容板块的工可以,例如Ngx_core_module表示该板块提供Nginx的核心功可以等;

具体各个板块中包含哪些板块能自己去源码中查询,这里略过;

二.Nginx的web请求解决机制

从架构设计上说,Nginx服务器是与众不同的。其一在于它的板块化设计;其二也是更重要的一点在于它对与用户端请求的解决机制上;

web服务器和用户端是一对多的关系,Web服务器必需有可以力同时为多个用户端提供服务。一般来说完成并行解决请求工作有三种方式:

1.多进程方式;

2.多线程方式;

3.异步方式;

这里简单说明一下这三种方式:

(1)多进程方式

多进程方式指,服务器每当收到一个用户端时。就有服务器主进程生成一个子进程出来和用户端建立连接进行交互。指导连接断开。该子进程就结束了。

多进程方式的优点是设计简单,各个子进程相对独立,解决用户端请求时彼此不受干扰;缺点是操作系统生成一个子进程需要进行内存复制等操作,在资源和时间上会产生肯定的开销;当有大量请求时,会导致系统性可以下降;

(2)多线程方式

多线程方式指每当服务器接收到一个请求后,会由服务器主进程派生出一个线程出来和用户端进行交互。因为操作系统产生出一个线程的开销远远小于一个进程的开销。故多线程方式在很大程度上减轻了Web服务器对系统资源的要求。但同时因为多个线程位于一个进程内,能访问同样的内存空间。所以需要开发者自己对内存进程管理,增大了难度。

(3)异步方式

异步方式适合多进程和多线程完全不同的一种解决用户端请求的方式。这里有几个概念我们需要熟习一下:同步,异步,阻塞,非阻塞;

在网络通信中同步和异步是形容通信模式的概念。

同步:发送方发送完请求后,需要等待接收到接收方发回的响应,才可以发送下一个请求;所有请求在服务端得到同步,发送方和接收方的步调是一致的;

异步:和同步机制相反,在异步机制中,发送方发出一个请求后,不等接收方响应这个请求,就继续发送下一个请求;所有来自发送方的请求形成一个队列,接收方解决完成后通知发送方;

在进程解决调度方式上使用阻塞与非阻塞。在网络通信中主要指套接字socket的阻塞和非阻塞,而socket的实质就是IO操作。

阻塞:调使用结果返回之前,当前线程从运行状态被挂起,一直等到调使用结果返回之后,才进入就绪状态,获取CPU后继续执行。

非阻塞:和阻塞方式正好相反,假如调使用结果不可以马上返回,当前线程也不会马上返回,而是立即返回执行下一个调使用。

因而就衍生出4中方式:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞

这里简单解释一下异步非阻塞:发送方向接收方发送请求后,不使用等待响应,能继续其余工作;接收方解决请求时进行的IO操作假如不可以马上得到结果,也不必等待,而是马上返回去去做其余事情。当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方。

与此同时Nginx服务器解决请求是怎么的呢???

Nginx服务器的一个明显的优势就是可以够同时解决大量的并发请求。它结合多进程机制和异步机制。异步机制用的是异步非阻塞方式。(Master-Worker)。

每个工作进程用异步非阻塞方式,能解决多个用户端请求。当某个工作进程接收到用户端的请求以后,调使用IO进行解决,假如不可以立即得到结果,就去解决其余的请求;而用户端在此期间也无需等待响应,能去解决其余事情;当IO返回时,就会通知此工作进程;该进程得到通知,暂时挂起当前解决的失误去响应用户端请求。

也就是:

Nginx采使用异步非阻塞方式来解决请求,解决请求具体到系统底层就是读写事件(所谓阻塞调使用方式即请求事件还没准备好,线程只可以一直去等,等事件准备好了再解决;而非阻塞即事件没准备好,马上返回ENGAIN,告诉你事件还没准准备好,而在这期间能先去做其余事,再回头看看事件准备好了吗,时不时会看,需要的开销也是不小的)

异步能了解为循环解决多个准备好的事件,不会导致无谓的资源白费,当有更多的并发数只会占使用更多的内存而已;

三.Nginx服务器的实践驱动模型

从上面我们能知道,Nginx服务器的工作进程调使用IO后,就取进行其余工作了;当IO调使用返回后,会通知工作进程。但IO调使用时如何把自己的状态通知给工作进程的呢??

一般处理这个问题有两种方法:(1)让工作进程在进行其余工作的过程中间隔一段时间就去检查一下IO的状态,假如完成就响应用户端,假如未完成,继续工作。

(2)IO调使用在完成后可以主动通知工作进程。

当然最好的就是使用第二种方法了;像select/poll/epoll等这样的系统调使用就是使用来支持第二种处理方案的。这些系统调使用也常被称为事件驱动模型。他们提供了一种机制就只让进程同时解决多个并发请求,不使用关心IO调使用的具体状态。IO调使用完全由事件驱动模型来管理。

Nginx中的事件驱动模型

就是使用事件驱动解决库(多路IO复使用),最常使用的就是select模型,poll模型,epoll模型。

关于这三个模型的详解在这里能看到:https://segmentfault.com/a/1190000003063859

四.架构简介

通过这个上面的简单讲解,再加上服务器的架构的理解,能对Nginx有一个简单的理解,希望对之后的源码剖析有帮助。

Nginx服务器架构解析

大致上Nginx的架构就是这样:

1.Nginx启动后,会产生一个主进程,主进程执行一系列的工作后会产生一个或者者多个工作进程;

2.在用户端请求动态站点的过程中,Nginx服务器还涉及和后台服务器的通信。Nginx将接收到的Web请求通过代理商转发到后台服务器,由后台服务器进行数据解决和组织;

3.Nginx为了提高对请求的响应效率,降低网络压力,采使用了缓存机制,将历史应答数据缓存到本地。保障对缓存文件的快速访问;

##工作进程##

工作进程的主要工作有以下几项:

接收用户端请求;

将请求一次送入各个功可以板块进行过滤解决;

IO调使用,获取响应数据;

与后台服务器通信,接收后台服务器解决结果;

数据缓存

响应用户端请求;

##进程交互##

Nginx服务器在用Master-Worker模型时,会涉及到主进程和工作进程的交互和工作进程之间的交互。这两类交互都依赖于管道机制。

1.Master-Worker交互

这条管道与普通的管道不同,它是由主进程指向工作进程的单向管道,包含主进程向工作进程发出的指令,工作进程ID等;同时主进程与外界通过信号通信;

2.worker-worker交互

这种交互是和Master-Worker交互是基本一致的。但是会通过主进程。工作进程之间是相互隔离的,所以当工作进程W1需要向工作进程W2发指令时,首先找到W2的进程ID,而后将正确的指令写入指向W2的通道。W2收到信号采取相应的措施。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|服务器应用】PHP和Python实战bcrypt算法(2019-02-01 20:47)
【系统环境|服务器应用】PostgreSQL数据库安装Version10.5(2019-02-01 20:47)
【系统环境|服务器应用】Notepad++快速选中多行(2019-02-01 20:47)
【系统环境|服务器应用】Clover支持目录多标签页(2019-02-01 20:47)
【系统环境|服务器应用】计算机视觉 OpenCV Android | Mat像素操作(2019-02-01 20:46)
【系统环境|服务器应用】PHP | 运算符 知识梳理与运用实例(2019-02-01 20:46)
【系统环境|服务器应用】人工智能通识-数学-零基础矩阵运算(2019-02-01 20:46)
【系统环境|服务器应用】Android-打包AAR步骤以及最为关键的注意事项!(2019-02-01 20:46)
【系统环境|服务器应用】回转寿司你肯定吃过!——Android消息机制(构造)(2019-02-01 20:46)
【系统环境|服务器应用】Android中不规则形状View的布局实现(2019-02-01 20:46)
手机二维码手机访问领取大礼包
返回顶部