Nginx 架构和基础原理

Nginx 的应用场景

Nginx 的应用场景主要有三个:

  • 静态资源服务
  • 反向代理服务
  • API 服务

静态资源服务

Nginx 可以通过本地文件系统提供静态资源的服务,例如纯静态的 HTML 页面等。

反向代理服务

很多应用服务的运行效率是很低的,QPS,TPS,并发等都是受限的,所以需要把很多应用服务组成一个集群,向用户提供高可用性的服务,这个时候需要 Nginx 的反向代理功能,而应用服务的动态扩容需要负载均衡功能,另外一个,Nginx 层还需要做缓存。因此反向代理服务主要是三个功能:

  • 反向代理
  • 负载均衡
  • 缓存

API 服务

有时候应用服务本身有很多性能问题,但是数据库服务要比应用服务好的多,业务场景比较简单,并发性和 TPS 都要远高于应用服务,所以这个时候可以由 Nginx 直接去访问数据库或者 Redis,还可以利用 Nginx 的强大的并发性来实现应用防火墙的 API 服务。

Nginx 架构基础

Nginx 状态机

Nginx 对外提供服务时,主要有三种流量会到达 Nginx:WEB、EMAIL、TCP 流量。这三种流量到达 Nginx 后,会分别由传输层状态机、应用层状态机、MAIL 状态机来处理。当内存不足以缓存所有的静态资源时,会退化成阻塞的磁盘调用,这个时候需要一个线程池来处理,对于每一个处理完的请求记录访问日志和错误日志,日志也是记录到磁盘中的。

Nginx 的进程结构

Nginx 有四种进程:

  • Master 进程。Master 进程是父进程,其他进程都是子进程,Master 进程对 worker 进程进行管理
  • worker 进程。worker 进程有多个,是负责处理具体的请求的。Nginx 为什么采用多进程而不是多线程的进程结构呢?是因为 Nginx 要保证高可用性,多线程之间会共享地址空间,当某一个第三方模块引发了一个段错误时,就会导致整个 Nginx 进程挂掉。而采用多进程模型不会出现这个问题
  • cache manager 和 cache loader 进程。缓存除了要被多个 worker 进程使用,也要被 cache 进程使用,cache loader 做缓存的载入,cache manager 做缓存的管理,实际上每一个请求所使用的缓存还是由 worker 进程来进行的。这些进程间的通信都是通过共享内存来进行的

为什么 worker 进程需要很多个?

这是因为,Nginx 采用了事件驱动的模型后,它期望 worker 进程可以从头到尾占满一颗 CPU,这样可以更加高效的利用整颗 CPU,提高 CPU 的缓存命中率,另外还可以将 worker 进程与某一个 CPU 核绑定在一起。

使用信号管理 Nginx 的父子进程

在前面说到了 Nginx 的命令行,其实很多 Nginx 的信号都是通过向 master 进程发送信号来实现的。

Master 进程

master 进程会监控 worker 进程,而监控是通过 Linux 规定的当子进程退出时需要向父进程发送 CHLD 信号实现的。这样可以当出现 bug 时,立刻拉起 worker。

master 进程可以接收以下信号:

  • TERM, INT
  • QUIT
  • HUP
  • USR1
  • USR2
  • WINCH

Worker 进程

worker 进程可以接收以下信号:

  • TERM, INT
  • QUIT
  • HUP
  • USR1
  • WINCH

命令行对应的信号

  • reload:HUP
  • reopen:USR1
  • stop:TERM
  • quit:QUIT

USR2 和 WINCH 没有对应的信号,只能通过 kill 发送。

stop 和 quit 的区别是,一个是立即退出,一个是优雅的停止。

reload 重载配置文件的真相

  1. 向 master 进程发送 HUP 信号
  2. master 进程检查配置文件是否有语法问题
  3. master 进程打开新的监听端口(如果配置了新的端口)
  4. master 进程使用新的配置文件启动 worker 进程
  5. master 进程向老的 worker 进程发送 QUIT 信号
  6. 老 worker 进程关闭监听句柄,处理完当前连接后结束进程

热部署的真相

在上一篇文章中,讲了热部署的流程,那么热部署具体的流程是怎么样的呢?

  1. 将旧的 Nginx 文件替换成新的 Nginx 文件(注意备份)
  2. 向 master 进程发送 USR2 信号
  3. master 进程修改 pid 文件名,加后缀 .oldbin
  4. master 进程用新 Nginx 文件启动新 master 进程
  5. 向老的 master 进程发送 quit 信号,关闭老的 master
  6. 回滚操作,向老的 master 进程发送 HUP 信号,向新的 master 发 QUIT

优雅的关闭 worker 进程

  1. 设置定时器 worker_shutdown_timeout
  2. 关闭监听句柄
  3. 关闭空闲连接
  4. 再循环等待全部连接关闭
  5. 退出进程

这里面,定时器的作用是,如果时间超时了,但是连接还没有处理完毕,就会强制退出进程。另外,Nginx 只能处理 HTTP 的优雅关闭,websocket 、TCP、UDP 的代理都做不到,worker 不解析数据。

以上这些内容,就是 Nginx 命令行和信号的完整过程。下一讲开始讲 HTTP 模块。

关注公众号领取 Nginx 知识图谱

原文地址:https://www.cnblogs.com/iziyang/p/12596407.html

时间: 2024-08-27 23:21:08

Nginx 架构和基础原理的相关文章

Linux高可用集群方案之heartbeat基础原理及逻辑架构

 这篇文章我们主要学习heartbeat高可用集群的基础原理及逻辑架构,以及heartbeat的简单配置  ll  本文导航    · heartbeat之基本原理   · heartbeat之集群组件   · heartbeat之心跳连接   · heartbeat之脑裂(资源争用.资源隔离) · heartbeat之配置文件   · heartbeat至高可用集群配置  ll  要求  掌握heartbeat高可用集群的相关组件及简单配置   heartbeat之基本原理  heartbea

第三十三天 LVS基础原理、调度算法、NAT和DR的实现 、LXC虚拟化

大规模站点构建框架 LVS的基础原理 LVS调度方法及NAT模型的实现 LVS  dr模型及lxc虚拟化 一.大规模站点架构框架 http: stateless keep-alive cookie: session 系统的:可扩展性.高可用性:99%, 99.9%, 99.999% .性能: 可扩展性: 容量:在一定时间内能完成的工作量 scale up: 向上扩展 scale out: 向外扩展 Cluster: 集群 构建高可扩展性系统的重要原则:在系统内部尽量避免串行化和交互 调度器:di

Web Service 之 http基础原理

Web Service 之 http基础原理 ========================================================================= 概述: 网络通信基础 ★进程间通信:IPC Socket(套接字):ip:port ★Client <--> Server Server: listen(监听状态,表示服务器正在等待新的传输链接进入) Client: ★客户端与服务器间通信实际上是客户端套接字和服务器端套接字间通信 IP:PORT(Cl

Keepalived+Nginx架构详解

Keepalived+Nginx架构 keepalived是一个类似于layer3.4.7交换机制的软件,也就是我们平时说的第3层.第4层和第7层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器.Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web.Mysql服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复

Nginx FastCGI的运行原理

一.FastCGI 1.介绍 CGI全称通用网关接口 Commmon Gateway Interface 用于HTTP服务上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上. 传统CGI接口方式性能较差,由于每次HTTP服务器遇到动态程序需要重启解析器来执行解析,然后结果被返回给HTTP服务器.这在处理高并发时,几乎是不可能的,因此诞生了FastCGI.另外传统的CGI接口方式安全性也很差 一个可伸缩地.高速地在HTTP服务器和动态脚本语言间通信的接口 接口在linux下是socke

系统架构师-基础到企业应用架构-企业应用架构

一.上篇回顾 我们先来回顾下上篇讲解的内容,我们前面的几节分别讲述了,业务逻辑层.数据访问层.服务层.表现层,我们了解了这些分层的职责和分层之间的大概的关联 关系,本篇可能主要是简单的介绍下企业应用的几类模式,结合这几个分层直接的交互来完成系统功能的构建.我们还是先对我们学习的四个分层的职责和功能做个大 概的回顾,我们先来看看下图来回顾下我们讲述的内容. 我想通过上图,大家能回忆起我们讲述的相关内容,然后整理好自己的思路,我们本文将会针对这几个分层进行相应的模式的讲解,并且会结合实例来说明企业应

大数据架构师基础:hadoop家族,Cloudera产品系列等各种技术

大数据我们都知道hadoop,可是还会各种各样的技术进入我们的视野:Spark,Storm,impala,让我们都反映不过来.为了能够更好的架构大数据项目,这里整理一下,供技术人员,项目经理,架构师选择合适的技术,了解大数据各种技术之间的关系,选择合适的语言. 我们可以带着下面问题来阅读本文章: 1.hadoop都包含什么技术 2.Cloudera公司与hadoop的关系是什么,都有什么产品,产品有什么特性 3. Spark与hadoop的关联是什么? 4. Storm与hadoop的关联是什么

三层架构之基础知识

一.概念 1.UI(表现层) 通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得.用于接收用户输入的数据和显示处理后用户需要的数据. 2.BLL:(业务逻辑层) UI层和DAL层之间的桥梁.:针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理.业务逻辑具体包含:验证.计算.业务规则等等. 3.DAL:(数据访问层) 与数据库打交道.主要实现对数据的增.删.改.查.将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库. 二.原理 用户的需求反映给界面

阅读《大型网站技术架构:核心原理与案例分析》第五、六、七章

题目:阅读<大型网站技术架构:核心原理与案例分析>第五.六.七章,结合<XXX需求征集系统>,分析如何增加相应的功能,提高系统的可用性和易用性,撰写一篇1500字左右的博客阐述你的观点 在这一节课上,我们学习了系统质量属性其中的可用性和易用性.那么质量属性是什么呢,质量属性是高于对系统功能(即对系统能力.服务和行为)的基本的要求的.系统质量属性讲重点放在了可用性.可修改性.性能.安全性.可测试性和易用性.从设计师方面,系统质量属性一般存在三个问题:(1)为属性提供的定义并不是可操作