您好,游客选择字体:繁體
首页 >> 服务器测评 >> Nginx服务器:内部核心架构设计

Nginx服务器:内部核心架构设计

amdin 2020-07-13 0
浏览次数88

Nginx的--- Ngine X,是一个免费,自由,开放源码的高性能HTTP服务器和反向代理服务器,同时也是一个IMAP,POP3,SMTP代理服务器,Nginx的它的高性能,稳定性,功能丰富,配置简单,资源消耗低是众所周知的。也就是说Nginx本身我们就可以通过托管教育网站,进行Http服务信息处理,也可以发展作为一个反向影响代理企业服务器,负载均衡器和HTTP缓存。

        Nginx解决了服务器的C10K(在一秒之内同时连接客户端的数量为10k)问题。 它不像传统服务器那样使用线程来处理请求,而是设计成一种更先进的机制,即事件驱动机制,一种异步事件驱动的结构。

一、Nginx的特点

平台之间的跨越: 它可以在大多数类 unix 系统上编译和运行。还有一个可移植版本的 windows。

配置的简便:很简单,易上手。

       非阻塞、高并发进行连接:数据可以复制时,磁盘I/O的第一阶段是非物质阻塞的。官方系统测试能支持5万并发网络连接,实际生产中不可能跑2~3万并发连接数(得益于Nginx采用了中国最新的epoll事件信息处理分析模型(消息管理队列)。

       代理商和后端Web服务器之间的Nginx没有长连接;Nginx接收信息用户请求是异步的,即先将学生用户可以请求进行全部数据接收下来,再一次性发送到后端Web服务器,极大程度减轻企业后端Web服务器的压力。从后端Web服务器接收数据时,会向客户端发送响应消息。

       网络依赖性低,理论上只要 ping 能实现负载均衡,并能有效区分内部和外部网络流量。

       支持内置服务器测试。 Nginx的是否出现故障,可根据应用服务器返回一个页状态码,服务器超时检测信息,并及时返回错误重新提交请求给其它节点进行处理。

       此外还有一个内存资源消耗小、成本价格低廉、节省带宽、稳定性高等教育特点。

       二,Nginx的整体架构

       1、模块化设计:Nginx 的Worker 进程,包括企业核心和功能性模块在内,核心管理模块主要负责维持自己一个系统运行循环( run-loop ),执行信息网络请求数据处理的不同教育阶段的模块实现功能,比如:存储读写、内容传输 、网络读写 、外出过滤 ,以及将请求发往上游服务器等。而其代码的模块化教学设计 ,也使得对于我们教师可以同时根据需要对社会功能模块之间进行研究适当的选择和修改 ,编译成具有中国特定功能的服务器。

       2、代理设计:代理(代理)设计,可以说是Nginx深层骨髓设计,无论是对于HTTP,还是对于网络请求或响应,如Memcache、Redis、FastCGI,基本上都采用代理机制。 因此,Nginx本身就是高性能的代理服务器。

       3、事件驱动模型:基于一个异步及非阻塞的事件进行驱动发展模型 ,可以这样说是 Nginx 得以不断获得 高并发 、 高性能 的关键影响因素,同时也得益于对 Linux 、 Solaris 及类 BSD 等操作管理系统设计内核中 事件信息通知 及 I/O 性能以及增强社会功能 的采用,如kqueue 、 epoll 及 event ports 。

       4、主进程模型:当 nginx 启动时,生成两种类型的进程,一个主进程和一个或多个辅助进程。 主进程不处理网络请求,但负责调度辅助进程,这是图中显示的三个项目: 加载配置、启动辅助进程和不停止升级。 所以当 nginx 启动时,如果我们看操作系统中的进程列表,我们会看到至少两个 nginx 进程。

       5、工作进程模型:实际处理网络服务器的请求和响应过程是工作在Unix系统上,Nginx的可以配置多个工人,并且每个工作进程可以同时处理数千个网络请求的。

       三,Nginx的模块化设计

       高度模块化的设计是 Nginx 的架构理论基础。Nginx 服务器被分解为多个管理模块 ,每个学生模块主要就是这样一个系统功能分析模块 ,只负责企业自身的功能,模块之间没有严格遵循 “高内聚,低耦合” 的原则。

       1、核心模块:Nginx服务器正常运行缺一不可的模块,提供错误日志记录,配置文件解析,事件驱动机制,进程管理等核心功能。

       2、标准HTTP模块:主要提供了 http 协议解析相关功能,如端口配置、页面编码设置、 http 响应头设置等。

       3、可选HTTP模块:主要用于扩展标准的HTTP的功能,使Nginx的可以处理某些特殊的服务,如:闪存多媒体传输,分析GeoIP的请求,网络传输压缩,SSL安全协议的支持。

       4、邮件服务模块:邮件信息服务管理模块设计主要可以用于社会支持 Nginx 的 邮件系统服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持。

       5、第三方模块:用来扩展Nginx的服务器应用程序,开发完整的定制功能,如:JSON支持,Lua的支持。

       四、代理问题设计中的正向影响代理和反向代理

       首先,代理服务器通常是指局域网内的机器,它通过代理服务器将请求发送到 internet 上的服务器,而代理服务器通常作用于客户端。 例如: goagent。 我们使用一个转发代理在我们的客户端上运行一个软件应用程序,当我们的客户端绕过防火墙时,将我们的 http 请求转发到另一个服务器,实现请求的分发。

       反向代理服务器在服务器端工作,接收客户端的请求,将请求分发到特定的服务器进行处理,然后将服务器的响应反馈给客户端。 Nginx 是一个反向代理服务器。反向代理服务器和转发代理正好相反,在客户端代理服务器而言是像原来的服务器,客户端不需要任何特殊设置。内容客户端扭转正常传输请求代理命名空间(命名空间),然后确定在何处反向代理(源服务器)发送请求,并返回所获得的内容到客户端。

       五、Nginx事件进行驱动系统模型

       在异步非阻塞机制的Nginx,调用IO后的工作过程,去处理其他的请求,当IO调用返回时,将通知工作过程。对于这样的系统调用,使用事件驱动模型的主要Nginx的服务器来实现。

       Nginx 的 事件进行驱动系统模型由事件发送器、事件收集器和事件处理器三部分学生基本结构单元重要组成:

       1、事件发送器:负责向事件处理器发送IO事件。

       2、事件收集器: 收集工作进程的 io 请求。

       3、事件处理:负责应对各种事件的工作。

       4、事件发送器将每个学生请求数据放入其中一个 待处理事件信息列表 ,使用非阻塞 I/O 方式进行调用 事件网络处理器技术来处理该请求。其处理生活方式可以称为 “多路 IO 复用设计方法” ,常见的包括通过以下分析三种:select 模型、 poll模型、 epoll 模型。

六,Nginx的处理请求

Nginx 是一个具有高性能的 Web 服务器,能够发展同时进行处理需要大量的并发请求。它结合多进程管理机制和异步工作机制 ,异步机制可以使用的是异步非阻塞交通方式 ,接下来就给大家通过介绍分析一下 Nginx 的多线程机制和异步非阻塞作用机制 。

多进程机制:每当服务器接收到客户端时,服务器主进程(masterprocess)生成子进程(workerprocess)与客户端进行交互,建立连接,直到连接断开,子进程结束。

优点是每个流程彼此独立,不需要锁定,减少了使用锁对性能的影响,同时降低了编程的复杂性,降低了开发成本。 其次,通过使用单独的进程,您可以防止进程相互干扰,如果一个进程出现异常,其他进程将正常工作,主进程将快速启动新的辅助进程,确保服务不会中断,从而将风险降到最低。

       缺点是操作系统需要生成一个子进程的内存拷贝等操作,在资源和时间会产生一定的开销方面。当大量的请求,导致系统性能的下降。

       2、异步非阻塞机制

       每个工作发展进程使用异步非阻塞管理方式,可以进行处理 多个客户端请求。

       当工作进程收到客户端请求,调用IO处理,如果不能得到明显的效果,去处理其他请求(也就是非阻塞),期间内,无需等待响应客户端,你可以去处理其他的事情(异步请求)。

       当 IO 返回时,就会进行通知此 工作发展进程 ;该进程可以得到及时通知,暂时 挂起 当前信息处理的事务去 响应客户端用户请求 。

       八。 Nginx过程模型

       Nginx 服务器使用主 /工多进程模式。多线程启动和执行如下:

       主进程主程序之后开始,以接收和通过一个for循环处理外部信号;

       主进程可以通过 fork() 函数问题产生 worker 子进程 ,每个 子进程 执行进行一个 for 循环来实现 Nginx 服务器 对事件的接收 和 处理 。

       推荐工作进程具有相同数量的CPU核心数量,所以没有大量的子进程的生成和管理任务,避免CPU资源和进程之间的切换竞争过程的开销。 Nginx的和以多核心属性,结合了CPU的亲和力报价选项更好地利用,我们可以绑定到一个核心一定的过程,以免带来缓存失败的,因为切换过程。

       对于每个请求,有且只有这样一个工作发展进程 对其处理。首先,每个 worker 进程管理都是从 master进程 fork 过来。在 master 进程以及里面,先建立好需要 listen 的 socket(listenfd) 之后,然后再 fork 出多个 worker 进程。

       所有listenfd工作进程是可读的,当一个新的连接的到来,以确保只有一个进程来处理连接,所有工作进程注册listenfd读取事件之前抢占accept_mutex,抢互斥锁其注册的过程listenfd读取事件,调用accept接受读数事件的连接。

       当一个 worker 进程在 accept 这个系统连接问题之后,就开始进行读取用户请求、解析请求、处理信息请求,产生影响数据后,再返回给客户端 ,最后才断开网络连接。这样对于一个比较完整的请求方式就是通过这样的了。我们教师可以自己看到,一个国家请求,完全由 worker 进程来处理,而且只在一个 worker 进程中处理。

       在运行Nginx的服务器的过程中,主处理和工作流程所需的处理的交互。插座交互的实现依赖于管道来实现的。

       1、主进程与工作发展进程进行交互

        与普通管道不同,该管道是从主流程到工作过程的单向管道,包含从主流程到工作过程的指令,工作过程ID等。 同时,主进程通过信号与外界通信;每个子进程都具有接收信号和处理相应事件的能力。

       2. 工作流程与工作流程相互作用

       这种信息交互是和主进程-工作发展进程进行交互是基本情况一致的,但是会通过主进程可以间接方式完成。 工作学习进程之间是相互隔离的,所以当工作时间进程 W1 需要向社会工作研究进程 W2 发指令时,首先我们找到 W2 的 进程ID,然后将正确的指令写入指向 W2 的 通道。W2 收到信号需要采取一些相应的措施。

文章来源:http://www.rakceping.com/c6/

全部评论:0