关注我的个人博客:www.yaoxinlei.com

姚鑫磊的博客园

翻过一座山,山后一片海。

Nginx-架构-2

高性能WEB服务Nginx

1.1.1 Nginx功能介绍

  • 静态的web资源服务器html,图片,js,scc,txt等静态资源

  • http/https协议的反向代理

  • 结合FastCGI/uUWSGI/SCGI等协议反向代理动态资源请求

  • tcp/udp协议的请求转发(反向代理)

  • imap4/pop3协议的反向代理

1.1.2 Nginx基础特性

  • 模块化设计,较好的扩展性

  • 高可靠性

  • 支持热部署:不停机更新配置文件,升级版本,更换日志文件

  • 低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存

  • event-driven,aio,mmap,sendfile

1.1.3 WEB服务相关的功能

  • 虚拟主机(server)

  • 支持keep-alive和管道连接(利用一个连接做多次请求)

  • 访问日志(支持基于日志缓冲提高其性能)

  • url rewirte

  • 路径别名

  • 基于ip及用户的访问控制

  • 支持速率限制及并发限制

  • 重新配置和在线升级而无须中断客户的工作进程

Nginx 架构和进程

2.2.1 Nginx 架构

image

2.2.2 Nginx 进程结构

Web请求处理机制:

  • 多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。

  • 多线程方式:与多进程方式类似,但是没收到一个客户端请求会有服务进程派出一个线程来给客户进行交互,一个线程的开销远远小于一个进程,因此多线程方式在深大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的优点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子进程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

Nginx是进程组织模型,而且是一个由Master主进程和Worker工作进程组成。

image

主进程(master process)的功能

  • 对外接口:接收外部的操作(信号)

  • 对内转发:根据外部的操作的不同,通过信号管理worker

  • 监控:监控worker 进程的运行状态, worker 进程异常终止后,自动重启worker进程

  • 读取Nginx 配置文件并验证其有效性和正确性

  • 建立、绑定和关闭socket连接

  • 按照配置生成、管理和结束工作进程

  • 接收外界指令,比如重启、升级及退出服务器等指令

  • 不中断服务,实现平滑升级,重启服务并应用新的配置

  • 开启日志文件,获取文件描述符

  • 不中断服务,实现平滑升级,升级失败进行回滚处理

  • 编译和处理perl脚本

工作进程(worker process)的功能

  • 所有worker 进程都是平等的

  • 实际处理:网络请求,由worker进程处理

  • worker进程数量:一般设置为核心数,充分利用cpu资源,同事避免进城数量过多,导致进程竞争cpu资源,增加上下文切换的损耗

  • 接受处理客户的请求

  • 将请求一次送入各个功能模块进行处理

  • I/O调用,获取响应数据

  • 与后端服务器通信,接收后端服务器的处理结果

  • 缓存数据,访问缓存索引,查询和调用缓存数据

  • 发送请求结果,响应客户的请求

  • 接收主程序指令,比如重启、升级和退出等

image

2.2.3 nginx进程间通信

工作进程是由主进程生成的,主进程使用fork()函数,在Nginx服务器启动过程中主进程根据配置文件决定启动工作进程的数量,然后建立一张全局的工作表用于存放当前未退出的所有的工作进程,主进程生成工作后会将新生成的工作进程加入到工作进程表中,并建立一个单向的管道并将其传递给工作进程,该管道与普通的管道不通,它是由主进程指向工作进程的单向通道,包含了主进程发出的指令、工作进程ID、工作进程在工作进程表中的索引和必要的文件描述符等信息。

工作进程之间的通信原理基本和主进程与工作进程之间的通信一样,只要工作进程之间能够取得彼此的信息,建立管道即可通信,但是由与工作进程之间是完全隔离的,因此一个进程想要知道另外一个进程的状态信息,就只能通过主进程来实现
为了实现工作进程之间的交互,主进程在生成工作进程后,在工作进程表中进行遍历,将该新进程的id以针对该进程建立的管道句柄传递给工作进程中的其他进程,为工作进程之间的通信做准备,当工作进程1向工作进程2发送指令的时候,首先在主进程给它的其他共走进程信息中找到2的进程id,然后将正确的指令写入指向进程2的管道,工作进程2捕获到管道中的事件后,解析指令并进行相关操作,这样就完成了工作进程之间的通信

image

2.2.4 HTTP 连接建立和请求处理过程

  • Nginx启动时,Master 进程,加载配置文件
  • Master进程,初始化监听的socker
  • Master进程,fork出多个worker进程
  • Worker进程,竞争新的连接,获取方通过三次握手,建立socker连接,并处理请求

2.2.5 HTTP 处理过程

image

Nginx 模块介绍

Nginx 有多种模块

  • 核心模块:是Nginx服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、时间驱动机制、进程管理等核心功能
  • 标准HTTP模块:提供HTTP协议解析相关的功能,比如:端口配置、网页编码设置、HTTP响应头设置等
  • 可选HTTP模块:主要用于扩展标准HTTP功能,让Nginx能处理一些特殊的服务,比如:Flash多媒体传输、解析Geolp请求、网络传输压缩、安全协议SSL支持等
  • Stream服务模块:实现反向代理功能,包括TCP协议代理
  • 第三方模块:是为了扩展Nginx服务器应用,完成开发者自定义功能,比如:JSON支持、Lus支持等

Nginx高度模块化,但其模块早期不支持DSO机制;1.9.11版本支持动态装载和卸载

image

posted @ 2021-12-06 15:14  姚鑫磊  阅读(34)  评论(0编辑  收藏  举报
区顶部