企业速成网站,高端建筑企业简介,给你一个网站怎么优化,自己有域名要怎么制作网站文章目录 1. nginx的应用特点2. nginx多进程架构2.1 nginx多进程模型2.2 master进程的作用2.3 进程控制2.4 worker进程的作用2.5 worker进程处理请求的过程2.6 nginx处理网络事件 1. nginx的应用特点 Nginx是互联网企业使用最为广泛的轻量级高性能Web服务器#xff0c;其特点是… 文章目录 1. nginx的应用特点2. nginx多进程架构2.1 nginx多进程模型2.2 master进程的作用2.3 进程控制2.4 worker进程的作用2.5 worker进程处理请求的过程2.6 nginx处理网络事件 1. nginx的应用特点 Nginx是互联网企业使用最为广泛的轻量级高性能Web服务器其特点是占用内存少、并发能力强。Nginx之所以被大家所喜爱除了其高性能外还有其优雅的系统架构。与Memcached的经典多线程模型相比Nginx是经典的多进程模型。 在介绍Nginx应用特点前首先介绍一下IO密集型和计算密集型:
IO密集型就是指IO占主要任务计算量很小比如请求网页读写文件。计算密集型就是指CPU计算占主要任务CPU一直处于满负荷状态比如大循环计算。
而Nginx本质上是一个Web ServerWeb Server的作用是解析HTTP请求返回静态数据或者把一些动态请求托付给其它server端程序。基于Nginx的这样的工作性质决定每个request的大部份生命都是在网络传输中实际上花费在server机器上的时间片不多。因此Nginx属于网络IO密集型应用不算是计算密集型。基于这样的特点才有可能实现多进程解决高并发的设计方案。
2. nginx多进程架构
2.1 nginx多进程模型
nginx的高性能与其架构是分不开的。 nginx采用的是经典的master-worker模型的多进程模型即一个master进程管理一个或者多个worker进程。基本的事件处理都在worker进程master进程负责一些全局初始化以及对worker进程的管理如下图所示 nginx分为单进程模式和多进程模式默认以多进程的方式来工作。 单进程模式常常在开发环境调试时候使用在对外服务时nginx多以多进程方式工作。 Nginx启动后会运行一个master进程和多个worker进程。其中master充当整个进程组与用户的交互接口同时对进程进行监护管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。worker用来处理基本的网络事件worker之间是平等的他们共同竞争来处理来自客户端的请求。
2.2 master进程的作用
master进程主要功能包括
接收来自外界的信号。向各worker进程发送信号。监控worker进程的运行状态当worker进程退出后(异常情况下)会自动重新启动新的worker进程。
2.3 进程控制
在启动后我们应该如何操作nginx呢
上面已经知道master进程可以用来管理worker进程所以我们只需要与master进程通信就行了。master进程会接收来自外界发来的信号再根据信号做不同的事情。所以我们要控制nginx只需要向master进程发送信号就行了。
比如kill -HUP pid我们一般用这个信号来从容地重启nginx。master进程在接收到HUP信号后会先重新加载配置文件然后再启动新的worker进程并向所有老的worker进程发送信号告诉他们可以光荣退休了。新的worker在启动后就开始接收新的请求而老的worker在收到来自master的信号后就不再接收新的请求并且在当前进程中的所有未处理完的请求处理完成后再退出。
2.4 worker进程的作用
worker进程负责处理网络事件
多个worker进程之间是对等的他们同等竞争来自客户端的请求。各进程互相之间是独立的。一个请求只可能在一个worker进程中处理一个worker进程不可能处理其它进程的请求。worker进程的个数是可以设置的一般我们会设置与机器cpu核数一致。
2.5 worker进程处理请求的过程
worker进程之间是平等的每个进程处理请求的机会也是一样的。当我们提供80端口的http服务时一个连接请求过来每个进程都有可能处理这个连接怎么做到的呢
每个worker进程都是从master进程fork出来的在master进程里面首先会建立好监听的socket然后再fork出多个worker进程。这样每个worker进程都可以去accept这个socket(当然不是同一个socket只是每个进程的这个socket会监控在同一个ip地址与端口这个在网络协议里面是允许的)。
一般来说当一个连接进来后所有accept在这个socket上面的进程都会收到通知但是只有一个进程可以accept这个连接其它的则accept失败这是所谓的惊群现象。
nginx提供了一个accept_mutex这个东西从名字上我们可以看这是一个加在accept上的一把共享锁。有了这把锁之后同一时刻就只会有一个进程在accpet连接这样就不会有惊群问题了。accept_mutex是一个可控选项我们可以显示地关掉默认是打开的。当一个worker进程在accept这个连接之后就开始读取请求解析请求处理请求产生数据后再返回给客户端最后才断开连接这样一个完整的请求就是这样的了。我们可以看到一个请求完全由worker进程来处理而且只在一个worker进程中处理。
2.6 nginx处理网络事件
Nginx采用异步非阻塞的方式来处理网络事件具体过程如下图 master进程先建好需要监听的socket后再fork出多个worker进程这样每个worker进程都可以去接收这个socket。当一个client连接到来时所有的worker进程都会收到通知但只有一个可以accept成功。这里Nginx提供了一个共享锁accept_mutex虽然所有的worker都会收到通知但只有一个进程抢到锁其它失败成功的worker进程接收请求。当一个worker进程在accept这个连接之后就开始读取请求解析请求处理请求产生数据后再返回给客户端最后才断开连接。
当运行过程中如果worker进程出现异常master会对worker进行重启。重启时会先启动新的worker进程然后向老的worker发送信号。新的worker启动后就开始接收新的请求而老的worker在收到信号后不再接收请求将当前进程中所有未处理完的请求处理完成后再退出。这样最大程度的满足可用性要求。