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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/298700.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI绘画Midjourney绘画提示词Prompt大全

一、Midjourney绘画工具 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭…

通俗易懂的15个Java Lambda表达式案例

文章目录 1. **实现Runnable接口**:2. **事件监听器**(如Swing中的ActionListener):3. **集合遍历**(使用forEach方法):4. **过滤集合**(使用Stream API):5. …

OS_lab——bochs源码的编译与安装

1. 实验环境VMware station 15 Ubuntu 14.04.6 32位。2. 实验步骤2.1 安装虚拟机,并在虚拟机根目录下编译并安装bochs环境。 2.2 使用bochs自带工具bximage创建虚拟软驱。 2.3 编写引导程序boot.asm并用nasm编译得到引导文件boot.bin和boot.com。 2.4 修改bochs…

C# Emgu.CV4.8.0读取rtsp流录制mp4可分段保存

【官方框架地址】 https://github.com/emgucv/emgucv 【算法介绍】 EMGU CV(Emgu Computer Vision)是一个开源的、基于.NET框架的计算机视觉库,它提供了对OpenCV(开源计算机视觉库)的封装。EMGU CV使得在.NET应用程序…

二刷Laravel 教程(用户注册)总结Ⅳ

一、显示用户信息 1)resource Route::resource(users, UsersController); 相当于下面这7个路由 我们先用 Artisan 命令查看目前应用的路由: php artisan route:list 2) compact 方法 //我们将用户对象 $user 通过 compact 方法转化为一个关联…

Linux-v4l2框架

框架图 从上图不难看出,v4l2_device作为顶层管理者,一方面通过嵌入到一个video_device中,暴露video设备节点给用户空间进行控制;另一方面,video_device内部会创建一个media_entity作为在media controller中的抽象体&a…

亲,你相信数据吗?

对于这个问题,我们首先要看一下数据的属性,数据本身是中性的,只是信息的一个载体,从这个属性定义来看,我们是不能盲目相信或者不相信数据的。相不相信数据,其实是数据可靠性的问题,而数据可靠性…

我的NPI项目之设备系统启动(二) -- 系统启动阶段和分区的区别

系统启动的就几大阶段: 基于高通平台的Android OS启动过程,简单的说,可以分为一下几个部分: 之前一个比较老的平台大概是这样: 现在比较新的5G平台: 差别在这里,重点了解一下新平台的情况。xb…

大模型实战笔记02——大模型demo

大模型实战笔记02——大模型demo 1、大模型及InternLM模型介绍 2、InternLM-Chat-7B智能对话Demo 3、Lagent智能体工具调用Demo 4、浦语灵笔图文创作理解Demo 5、通用环境配置 注 笔记图片均为视频截图 笔记课程视频地址:https://www.bilibili.com/video/BV1Ci4y1…

彻底认识Unity ui设计中Space - Overlay、Screen Space - Camera和World Space三种模式

文章目录 简述Screen Space - Overlay优点缺点 Screen Space - Camera优点缺点 World Space优点缺点 简述 用Unity中开发了很久,但是对unity UI管理中Canvas组件的Render Mode有三种主要类型:Screen Space - Overlay、Screen Space - Camera和World Spa…

iptalbes详解

iptalbes防火墙 一、IPtables介绍 Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤(对OSI模型的四层或者是四层以下进行过滤)的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器…

深度学习|交叉熵

文章目录 什么是交叉熵如何构造信息量的函数关于 C 1 C_1 C1​参数的选择关于 C 2 C_2 C2​参数的选择 一个系统的熵如何比较两个系统的熵交叉熵在神经网络中的应用参考 什么是交叉熵 熵是用来衡量一个系统的混乱程度,混乱程度也其实代表着整个系统内部的不确定性。…

Oracle 日志路径查询介绍

数据库日志分析详解:  ORACEL RAC 体系架构分析  Oracle RAC 包含GI(Grid Infrastructure) 集群软件与Oracle数据库组成。  GI包含两个最主要的组件:Clusterware集群软件和ASM存储软件,这两个软件提供数据库高可用能力。  …

C++八股学习心得.6

1.C 异常处理 异常是程序在执行期间产生的问题。C 异常是指在程序运行时发生的特殊情况 异常提供了一种转移程序控制权的方式。C 异常处理涉及到三个关键字:try、catch、throw。 throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来…

【动态规划】【 矩阵】【逆向思考】C++算法174地下城游戏

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 矩阵 逆向思考 LeetCode174地下城游戏 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#x…

Golang leetcode142 环形链表 暴力map 快慢指针法

文章目录 环形链表 leetcode142暴力遍历 map哈希记录快慢指针法 环形链表 leetcode142 该题目要求找到入环的第一个节点 我们可以通过map进行记录,没到新的节点查询是否经过原有节点 入环节点,上两个节点的next相同 若有入环节点,则一定能检…

TypeError: loaderUtils.getOptions is not a function

webpack 版本:^5.89.0 但是直接 pnpm add loader-utils 安装的版本比较新,会报错:TypeError: loaderUtils.getOptions is not a function。 解决方案:将低 loader-utils 版本,我这里使用 ^2.0.0 就不会再报这个错误了 …

【读书笔记】网空态势感知理论与模型(九)

对分析人员数据分类分流操作的研究 1.概述 本章节介绍一种以人员为中心的智能数据分类分流系统,该系统利用了入侵检测分析人员的认知轨迹。整合了3个维度的动态网络-人系统(cyber-humber system):网空防御分析人员、网络监测数据…

muduo网络库剖析——网络地址InetAddress类

muduo网络库剖析——网络地址InetAddress类 前情从muduo到my_muduo 概要socketaddr_in介绍成员用法 网络地址转换函数 框架与细节成员函数使用方法 源码 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足&#xf…

RocketMQ源码 发送顺序消息源码分析

前言 rocketmq 发送顺序消息和普通消息的主流程区别大部分一致的,区别在于:普通消息发送时,从所有broker的队列集合中 轮询选择一个队列,而顺序队列可以提供用户自定义消息队列选择器,从NameServer 分配的顺序 broker…