Nginx快速入门:worker、master进程的作用和热部署原理(十)

0. 引言

我们通过查询nginx进程,可以发现nginx有两个进程:worker和master。一个程序启动了两个进程,那么这两个进程的作用和区别是什么呢?nginx又是如何利用这两个进程进行工作的呢?nginx不停机热部署又是如何实现的?
在这里插入图片描述

这是我们学习nginx要掌握的基础原理,于是今天我们暂时放下实操,从原理入手,了解nginx

1. 概念

1.1 什么是master、worker进程

master进程为nginx主进程,worker为工作进程,worker进程可以为多个,worker进程数一般是服务器CPU核数,不然过多的worker数,会导致进程相互竞争CPU,反而导致更多的上下文切换,降低效率。

master主进程会作为监控进程,主要负责启动和监控其他worker进程,同时也会负责将请求进行分发给worker进程,master进程会管理这些worker进程的全生命周期,比如启动、停止、平滑升级等。也负责系统资源调配给worker进程,整理来看master是个管理者。

而worker进程就是工作者了,主要负责接收和处理请求转发、以及静态资源等访问,总之就是业务相关的处理都是由worker进程执行。
在这里插入图片描述

1.2 worker进程的生命周期

1、nginx启动时,master进程会读取配置文件中配置的worker_processes创建对应个数的worker进程
2、每个worker进程通过master进程fork复制出来(源码ngx_spawn_process方法可以看出)
在这里插入图片描述

3、然后worker进程会执行自己的初始化代码,进入运行状态
4、运行期间,worker进程处于一个无限循环状态,等待客户请求
在这里插入图片描述

5、当客户请求到达,请求会从master进程转发给worker进程,worker进程进行实际的处理,并返回数据给客户
6、nginx停止时,master进程会收到终止信号,然后master会通知所有的worker进程
7、worker进程接收到停止通知后,会等待当前所有请求处理完成后,进行清理工作:释放资源、关闭打开的文件描述符、关闭监听端口等
8、worker进程终止后,其进程标识符 PID会被master进程回收
在这里插入图片描述

1.3 worker进程之间资源竞争

我们说明了worker进程可能有多个,有多个同类型进程就会涉及到访问相同的资源,那么也就出现了资源竞争问题。

资源竞争会产生各种问题,如脏读等,nginx如何解决呢?

答案就是通过加锁,获取到锁的进程才能竞争到资源,否则就进入等待锁释放,在nginx的核心事务处理方法ngx_process_events_and_timers中可以看到加锁操作
在这里插入图片描述
而nginx中是通过原子变量,信号量,文件fd加锁的方式来综合实现的一套互斥锁机制

2. Nginx热部署原理

nginx热更新实现主要得益于worker进程的机制,其热更新过程如下:
1、修改nginx.conf配置文件,执行nginx -s reload重新加载配置文件
2、master进程读取新配置,根据新配置启动新的worker进程
3、master进程向老worker进程发出停止信号
4、worker进程停止接收新的客户请求,将已有的请求处理完成后关闭
5、使用新配置启动的worker进程来接收用户请求

总结一句话,nginx热更新的原理就是:旧的业务进程继续处理已有的请求,但是不接收新的请求,按新配置启动新的进程,接收新的请求,旧请求处理完后停止旧进程,这样就完成了配置的热更新。
在这里插入图片描述

3. 总结

如上我们对nginx中两种进程的基本原理做了基础的认知,也说明了nginx实现热部署的原理和步骤,也希望大家能结合之前讲解的实操步骤,更好的理解nginx中的各种奇妙设计。后续我们会继续实操+原理穿插讲解,带大家持续入门nginx

相关推荐

  1. Tomcat源码解析——部署加载原理

    2024-01-08 06:10:06       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-08 06:10:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-08 06:10:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-08 06:10:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-08 06:10:06       20 阅读

热门阅读

  1. JDBC-基本概念

    2024-01-08 06:10:06       40 阅读
  2. PHP+MySQL+Ajax实现注册功能

    2024-01-08 06:10:06       41 阅读
  3. 蓝桥杯基础知识1 字母大小写转换

    2024-01-08 06:10:06       50 阅读
  4. gin使用jwt登录验证

    2024-01-08 06:10:06       40 阅读
  5. 第28关 k8s监控实战之Prometheus(四)

    2024-01-08 06:10:06       42 阅读
  6. K8S---通过curl访问api

    2024-01-08 06:10:06       29 阅读
  7. 华为HCIE课堂笔记第十三章 IPv6地址配置

    2024-01-08 06:10:06       27 阅读
  8. 基于单片机的智能电子秤控制系统的设计与实现

    2024-01-08 06:10:06       45 阅读