IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx 架构简介 -> 正文阅读

[系统运维]Nginx 架构简介

更多内容,可前往Nginx 简介、安装与控制命令进行浏览

一、nginx进程

在这里插入图片描述
ngin在启用的时候,默认有两个进程,一个是master进程,一个是worker进程。

master进程不是用来处理请求的,而只是做一些管理性的工作,是leader,只分配任务,自己不干活。
比如:处理对配置文件的reload。在执行命令./sbin/nginx -s reload时,其实就是给master进程发送了一个信号:需要重载配置文件。
比如:执行命令./sbin/nginx -s stop,也是由master进行来完成的

worker进程是真正处理请求的。本身是单线程的,虽然只有一个进程,但是可以直接处理成千上万的连接(底层是通过NIO的方式来工作的
由于只有一个进程,而一个进程只能用一个CPU,
可以给进程配置成多级进程,充分利用CPU 资源。这样的话就能大大提高并发能力的承载数量。
worker进程越多,处理的并发数量就越多吗?
答案:不是。如果worker进程的数量超出了CPU核数,比如CPU是4核的,但是给了8个进程,但是其实还是4个在工作,还要等待资源,反而会影响性能
在这里插入图片描述
1)nginx启动时,不处理网络请求,主要负责调度工作进程,也就是:加载配置、启动工作进程及非停升级。
所以,nginx启动以后,查看操作系统的进程列表,我们就能看到至少有两个nginx进程。

2)服务器实际处理网络请求及响应的是工作进程(worker),在类unix系统上,nginx可以配置多个worker,而每个worker进程都可以同时处理数以千计的网络请求。

3)模块化设计。nginx的worker,包括核心和功能性模块,核心模块负责维持一个运行循环(run-loop),执行网络请求处理的不同阶段的模块功能,如网络读写、存储读写、内容传输、外出过滤,以及将请求发往上游服务器等。而其代码的模块化设计,也使得可以根据需要对功能模块进行适当的选择和修改,编译成具有特定功能的服务器。

4)事件驱动、异步及非阻塞,可以说是nginx得以获得高并发、高性能的关键因素,同时也得益于对Linux、Solaris及类BSD等操作系统内核中事件通知及I/O性能增强功能的采用,如kqueue、epoll及event ports。



为什么一个worker进程可以处理成千上万的连接,而Apache一万个连接就需要一万个进程,NIO是如何做到的呢?
答案:浏览器的请求主要流程见下图:
在这里插入图片描述
??????请求通过进程,执行了一些CPU相关的命令,告诉CPU要从哪个硬盘里面把数据拷贝过来,然后通过网卡返回到浏览器。

??????数据在拷贝的过程中,首先是通过CPU发起拷贝的指令,拷贝时,按照传统方式,首先会将硬盘中的数据拷贝到内核态(内存),再拷贝到应用态,然后拷贝到网卡,最后将数据拷贝出去,返回到浏览器。

??????如果按照Apache的做法,在拷贝的过程中,指令发送很快,很快就发送出去了,但指令发送出去之后,进程就没事做了,需要等待数据从硬盘拷贝到内核态(内存),然后从系统态拷贝到应用态。
???从系统态拷贝到应用态是比较快的(因为是内存间的操作),但是从硬盘拷贝到操作系统这个步骤非常慢,Apache就会在这里进行等待,整个进程都是处于等待的状态,当连接越多的时候,相应的整个等待的进程就会越来越多

??????如果按照Nginx的NIO模式,当发送完拷贝指令之后,进程是不会在这里进行等待的,而是去处理另一个请求,发送其他请求的CPU指令。这样,每个指令发送完就会立马发送第二条…。
???进程不等待,当硬盘的数据完成拷贝,怎么告诉nginx呢?nginx会调用操作系统里面的epool,维护了所有连接的拷贝状态列表,Nginx会去查询,看哪些请求已经准备就绪了,才会继续将数据从内核态到应用态的操作,然后再返回到浏览器,完成一个请求

??????所以总的来说:关键在于阻塞和不阻塞


  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:57:18  更:2021-08-24 16:02:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 8:33:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计