第三章-----Nginx 架构初探(学习笔记)
2017-04-28 00:00
423 查看
一、模块化结构的相关知识
1.1什么事模块化设计
第一:‘功能块’是对模块的描述,一个模块就是一个功能块,应该只负责一个功能,在设计模式理论中类似于经常提到的‘单一职责原则’
第二:如果要体现模块化,,就避免不了将程序分解,这也是模块化编程的另一个原则-------自顶向下,逐步求精原则
第三:一个程序被分解成多个模块,那么他们之间一定存在一定的依赖关系,但是这个依赖关系不能太强,否则就不能称之为模块化了。
于是,有涉及到另一个原则:高内聚,低耦合原则,。事实上,在设计模式理论中,也有对应的一条设计原则叫 “迪米特原则“
1.2 模块化结构
Nginx 涉及到的模块分为核心模块,标准http模块,可选http模块,邮件服务模块,以及第三方模块等五大类。核心模块和标准http模块在
nginx快速编译后就包含在nginx中。
1.核心模块
提供了nginx 最核心的服务,主要包含两类功能的支持,一类是主题功能,包括进程管理,权限管理,错误日志记录,配置解析等另一类是用于响应请求时间必须的功能,包括事件驱动机制、正则表达式解析等
2.标准http模块
这一模块对应于基本http功能,nginx服务器主要提供基本http服务,高级http服务和邮件服务等
3.可选http模块
主要用于扩展标准的http功能,能够处理一些特殊的http请求
4.邮件服务模块
主要用于支持nginx的邮件服务
5.第三方模块
为了扩展nginx服务器应用,完成特殊的功能而由第三方机构或者个人编写的可编译到nginx中的模块。
二、Nginx如何处理web请求--------多线程异步非阻塞方式
完成并行处理请求工作方式有三种:
2.1多进程方式
多进程方式是指,服务器每当接收到一个客户端时,就由服务器主进程生成一个子进程出来和该客户端建立连接进行交互,知道连接断开,该子进程就结束了
优点:设计和实现相对简单,各个子进程之间相互独立,处理客户端请求的过程彼此不受到干扰,并且当一个子进程产生问题时,不容易将影响蔓延到其他进程中,保证了提供服务的稳定性。当子线程退出时,其占用的资源会被操作系统收回,不会留下任何垃圾
缺点:操作系统中生成一个子进程需要进行内存复制等操作,在资源和时间上会产生一定额外开销,如果web服务器接收大量并发请求,就会对系统资源造成压力,导致系统性能下降。
Apache服务器使用了多进程方式对外提供服务
2.2多线程方式
多线程方式和多进程方式相似,它是指,服务器每当收到一个客户端时,会由服务器生一个线程出来和这个客户端进行交互。
操作系统产生线程的开销远远小于产生一个进程的开销,所以多线程方式在很大的程度上减轻了web服务器对系统资源的要求。
缺点:多线程位于同一个进程内,可以访问同样的空间,彼此之间相互影响,同时,在开发过程中不可避免的要由开发者自己对内存进行管理,能加了出错的风险。
IIS服务器使用了多线程的方式对外提供服务
2.3异步方式
异步方式会产生四个概念:同步非阻塞、同步阻塞、异步非阻塞、异步阻塞
2.4Nginx服务器处理请求
nginx启动后,可以产生一个主进程(matster process)和多个工作进程(worker process),其中可以在配置文件中指定产生的工作进程数量。Nginx服务器的所有工作进程都用于接收和处理客户端请求。
客户请求数量增长、网络负载繁重时,Nginx服务器使用多进程机制能够保证不增长对系统资源的压力;
使用异步非阻塞方式减少了工作进程在I/O调用上的阻塞延迟,保证了不降低对请求的处理能力。
2.5Nginx事件处理机制
IO调用完成后主动通知工作进程。
select,poll,epoll,kqueue等这样的系统调用也常被称为事件驱动模型,他们提供了一种机制,让进程可以同时处理多个并发请求,不用关心IO调用的具体状态。IO调用完全由事件驱动模型来管理,事件准备好之后就会通知工作进程已经就绪。
三、Nginx的事件驱动模型
1.select库
2、poll库
3、epoll库
4、rtsig库
5、其他驱动模型:Kqueue模型,/dev/poll模型,eventport模型
四、Nginx 设计架构概览
4.1、Nginx服务器架构
nginx 服务器的结构大致分为主进程、工作进程、后端服务器、和缓存等部分。
4.2、Nginx服务器的进程
1.主进程
nginx服务器启动运行的主要进程。主要功能是与外界通信和对内部其他进行管理,具体来说有以下几点:
读取nginx配置文件并验证其有效性和正确性
建立、绑定和关闭Socket
按照配置生成、管理、和结束工作进程
接受外界指令,比如重启、升级和退出服务器等指令
不中断服务,实现平滑重启,应用新配置
不中断服务,实现平滑升级,升级失败进行回滚处理
开启日志文件,获取文件描述符
编译和处理Perl脚本
2.工作进程
由主进程生成,生成数量可由nginx配置文件指定,正常情况下生存于主进程的整个生命期。该进程的主要工作有以下几项:
接受客户端请求
将请求依次送各个功能模块进行过滤处理
IO调用,获取响应数据
与后端服务器通信,接收后端服务器处理结果
数据缓存,访问缓存索引、查询和调用缓存数据
发送请求结果,响应客户请求
接收主程序指令,比如重启、升级和退出等指令
3.缓存索引重建及管理进程
4.3、进程交互
1.master-worker交互
2.worker-worker交互
4.4、Run Loops事件处理循环模型
指的是进程内部用来不停的调配工作,对事件进行循环处理的一种模型,他属于进程或者线程的基础架构部分。该模型对事件的处理不是自动的,需要在设计代码过程中,在适当的时候启动Run-Loop机制对输入的事件作出响应。
1.1什么事模块化设计
第一:‘功能块’是对模块的描述,一个模块就是一个功能块,应该只负责一个功能,在设计模式理论中类似于经常提到的‘单一职责原则’
第二:如果要体现模块化,,就避免不了将程序分解,这也是模块化编程的另一个原则-------自顶向下,逐步求精原则
第三:一个程序被分解成多个模块,那么他们之间一定存在一定的依赖关系,但是这个依赖关系不能太强,否则就不能称之为模块化了。
于是,有涉及到另一个原则:高内聚,低耦合原则,。事实上,在设计模式理论中,也有对应的一条设计原则叫 “迪米特原则“
1.2 模块化结构
Nginx 涉及到的模块分为核心模块,标准http模块,可选http模块,邮件服务模块,以及第三方模块等五大类。核心模块和标准http模块在
nginx快速编译后就包含在nginx中。
1.核心模块
提供了nginx 最核心的服务,主要包含两类功能的支持,一类是主题功能,包括进程管理,权限管理,错误日志记录,配置解析等另一类是用于响应请求时间必须的功能,包括事件驱动机制、正则表达式解析等
2.标准http模块
这一模块对应于基本http功能,nginx服务器主要提供基本http服务,高级http服务和邮件服务等
3.可选http模块
主要用于扩展标准的http功能,能够处理一些特殊的http请求
4.邮件服务模块
主要用于支持nginx的邮件服务
5.第三方模块
为了扩展nginx服务器应用,完成特殊的功能而由第三方机构或者个人编写的可编译到nginx中的模块。
二、Nginx如何处理web请求--------多线程异步非阻塞方式
完成并行处理请求工作方式有三种:
2.1多进程方式
多进程方式是指,服务器每当接收到一个客户端时,就由服务器主进程生成一个子进程出来和该客户端建立连接进行交互,知道连接断开,该子进程就结束了
优点:设计和实现相对简单,各个子进程之间相互独立,处理客户端请求的过程彼此不受到干扰,并且当一个子进程产生问题时,不容易将影响蔓延到其他进程中,保证了提供服务的稳定性。当子线程退出时,其占用的资源会被操作系统收回,不会留下任何垃圾
缺点:操作系统中生成一个子进程需要进行内存复制等操作,在资源和时间上会产生一定额外开销,如果web服务器接收大量并发请求,就会对系统资源造成压力,导致系统性能下降。
Apache服务器使用了多进程方式对外提供服务
2.2多线程方式
多线程方式和多进程方式相似,它是指,服务器每当收到一个客户端时,会由服务器生一个线程出来和这个客户端进行交互。
操作系统产生线程的开销远远小于产生一个进程的开销,所以多线程方式在很大的程度上减轻了web服务器对系统资源的要求。
缺点:多线程位于同一个进程内,可以访问同样的空间,彼此之间相互影响,同时,在开发过程中不可避免的要由开发者自己对内存进行管理,能加了出错的风险。
IIS服务器使用了多线程的方式对外提供服务
2.3异步方式
异步方式会产生四个概念:同步非阻塞、同步阻塞、异步非阻塞、异步阻塞
2.4Nginx服务器处理请求
nginx启动后,可以产生一个主进程(matster process)和多个工作进程(worker process),其中可以在配置文件中指定产生的工作进程数量。Nginx服务器的所有工作进程都用于接收和处理客户端请求。
客户请求数量增长、网络负载繁重时,Nginx服务器使用多进程机制能够保证不增长对系统资源的压力;
使用异步非阻塞方式减少了工作进程在I/O调用上的阻塞延迟,保证了不降低对请求的处理能力。
2.5Nginx事件处理机制
IO调用完成后主动通知工作进程。
select,poll,epoll,kqueue等这样的系统调用也常被称为事件驱动模型,他们提供了一种机制,让进程可以同时处理多个并发请求,不用关心IO调用的具体状态。IO调用完全由事件驱动模型来管理,事件准备好之后就会通知工作进程已经就绪。
三、Nginx的事件驱动模型
1.select库
2、poll库
3、epoll库
4、rtsig库
5、其他驱动模型:Kqueue模型,/dev/poll模型,eventport模型
四、Nginx 设计架构概览
4.1、Nginx服务器架构
nginx 服务器的结构大致分为主进程、工作进程、后端服务器、和缓存等部分。
4.2、Nginx服务器的进程
1.主进程
nginx服务器启动运行的主要进程。主要功能是与外界通信和对内部其他进行管理,具体来说有以下几点:
读取nginx配置文件并验证其有效性和正确性
建立、绑定和关闭Socket
按照配置生成、管理、和结束工作进程
接受外界指令,比如重启、升级和退出服务器等指令
不中断服务,实现平滑重启,应用新配置
不中断服务,实现平滑升级,升级失败进行回滚处理
开启日志文件,获取文件描述符
编译和处理Perl脚本
2.工作进程
由主进程生成,生成数量可由nginx配置文件指定,正常情况下生存于主进程的整个生命期。该进程的主要工作有以下几项:
接受客户端请求
将请求依次送各个功能模块进行过滤处理
IO调用,获取响应数据
与后端服务器通信,接收后端服务器处理结果
数据缓存,访问缓存索引、查询和调用缓存数据
发送请求结果,响应客户请求
接收主程序指令,比如重启、升级和退出等指令
3.缓存索引重建及管理进程
4.3、进程交互
1.master-worker交互
2.worker-worker交互
4.4、Run Loops事件处理循环模型
指的是进程内部用来不停的调配工作,对事件进行循环处理的一种模型,他属于进程或者线程的基础架构部分。该模型对事件的处理不是自动的,需要在设计代码过程中,在适当的时候启动Run-Loop机制对输入的事件作出响应。
相关文章推荐
- 第三章-----Nginx 架构初探(学习笔记)
- 第三章 Nginx服务器架构初探
- 《学习opencv》学习笔记 - 第三章 初探opencv
- 第三章 Nginx服务架构初探
- ASP.net(1.1)原理学习笔记--第一章 ASP.net的基本架构
- ASP.net(1.1)原理学习笔记--第三章 配置Configuration
- Spring in Action 学习笔记—第三章创建切面
- C++primer 第三章学习笔记(string篇)
- SQL Server 2005 学习笔记--SSIS篇(3架构)
- Pro visual c++/cli and .net 2.0 platform2 学习笔记(9第三章 面向对象的C++/CLI==2)
- 写得蛮好的linux学习笔记 linux目录架构 转帖
- MOM2005基础架构设计学习笔记3
- Spring学习笔记:第三章 IoC中的国际化
- Spring学习笔记:第三章 IoC中的国际化
- 《COM原理及应用》学习笔记之第三章
- Pro visual c++/cli and .net 2.0 platform2 学习笔记(8第三章 面向对象的C++/CLI===1)
- [转载]学习笔记《.NET框架程序设计(修订版)》--第一章 Microsoft .NET框架开发平台体系架构(2)
- Linux学习笔记之目录架构
- 《Windows 64位架构及其开发》学习笔记
- MOM2005基础架构设计学习笔记2