开发者学堂课程【Nginx 企业级 Web 服务实战:IO 模型介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/649/detail/10751
IO 模型介绍(一)
内容介绍:
一、web 服务介绍
二、系统 I/O 模型
三、网络 I/O 模型
四、信号驱动式 IO(signal-driven IO)
五、异步(非阻塞) IO(asynchronous IO)
六、IO 对比
七、实现方式
八、常用模型汇总
九、常用模型对比
十、MMAP 介绍
十一、传统方式 copy 数据
十二、Mmap 方式
一、web 服务介绍
1.影响用户体验的几个因素:
(1)客户端硬件配置
(2)客户端与服务端距离
(3)服户端网络速率
(4)服务端硬件配置口
(5)服务端架构设计
(6)服务端应用程序工作模式
(7)服务端并发数量
(8)服务端响应文件大小及数量
(9)服务端 I/O 压力
2.应用程序工作模式:
prefork: 进程模型,两级结构,主进程 master 负责生成子进程,每个子进程负责响应一个请求
worker:线程模型,三级结构,主进程 master 负责生成子进程,每个子进程负责生成多个线程
event:线程模型,三级结构,主进程 master 负责生成子进程,每个子进程生成多个线程,每个线程是增加了一个监听线程,用于解决在设置了 keep-alived 场景下线程的空等待问题。
Nginx ( Master+Worker)模式:
主线程工作进程 #直接处理客户的请求
线程验证方式:
# cat /proc/PID/statuse
#t pstree -p PID
3.服务端 I/O:
I/O 在计算机中指 Input/Output, IOPS (Input/Output Per Second) 即每秒的输⼊输出量(或读写次数),是衡量磁盘性能的主要指标之一。
IOPS 是指的是在单位时间内系统能处理的 I/O 请求数量,⼀般以每秒处理的 I/O 请求数量为单位,I/O 请求通常为读或写数据操作请求。
(1)旋转延迟:
是指将磁盘片旋转到数据所在的扇区到磁头下面所花费的时间,旋转延迟取决于磁盘的转速,通常使用磁盘旋转一周所需要时间的1/2之一表示,比如720O 转的磁盘平均训传延迟大约为
60*1000/7200/2=4.17毫秒,公式的意思为(每分钟60秒*1000毫秒每秒/7200转每分钟/2),
如果是15000转的则为60*1000/15000/2=2毫秒。
(2)数据传输时间:
指的是读取到数据后传输数据的时间,主要取决于传输速率,这个值等于数据大小除以传输速率,目前的磁盘接口每秒的传输速度可以达到600MB,因此可以忽略不计。
(3)常见的机械磁盘平均寻道时间值:
7200转/分的磁盘平均物理寻道时间:9毫秒
10000转/分的磁盘平均物理寻道时间:6毫秒
15000转/分的磁盘平均物理寻道时间:4毫秒
(4)常见磁盘的平均延识时间:
7200转的机械盘平均延迟:60*1000/7200/2= 4.17ms
10000转的机械盘平均延迟:60*1000/10000/2 = 3ms 15000转的机械盘平均延迟:60*1000/15000/2= 2ms
(5)每秒最大 IOPS 的计算方法:
7200转的磁盘 IOPS 计算方式:1000毫秒/(9毫秒的寻道时间+4.17毫秒的平均旋转延迟时间)=1000/13.13=75.9 IOPS
10000转的磁盘的 IOPS 计算方式:1000毫秒八(6毫秒的寻道时间+3毫秒的平均旋转延迟时间)=1000/9=1110 IOPS
15000转的磁盘的 IOPS 计算方式:15000毫秒/(4毫秒的寻道时间+2毫秒的平均旋转延迟时间)=1000/6=16.6 IOPS
一次完整的 I/O 是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而是需要经历一次从内核空间中的内存数据 copy 到用户空间的进程内存当中,所以简单说 I/O 就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。
而网络通信就是网络协议栈到用户空间进程的 IO 就是网络 IO
磁盘 I/O 是进程向内核发起系统调用,请求磁盘上的某个资源比如是文件或者是图片,然后内核通过相应的驱动程序将目标图片加载到内核的内存空间,加载完成之后把数据从内核内存再复制给进程内存,如果是比较大的数据也需要等待时间。
(6)每次 IO 都要经由两个阶段:
第一步:将数据从磁盘文件先加载至内核内存空间(缓冲区).此步骤需要等待数据准备完成.时间较长
第二步:将数据从内核缓冲区复制到用巨空间的进程的内存中,时间较短
二、系统 I/O 模型
1.同步/异步:
关注的是事件处理的消息通信机制,即在等待⼀件事情的处理结果时,被调用者是否提供完成通知。
同步:
synchronous,调用者等待被调用户者返回消息后才能继续执行,如果被调用者不提供消息返回则为同步,同步需要调⽤者主动询问事情是否处理完成。
异步:
asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的行状态
同步︰
进程发出请求调用后,等内核返回响应以后才继续下一个请求,即如果内核一直不返回数据,那么进程就一直等。
异步︰
进程发出请求调用后,不等内核返回响应,接着处理下一个请求,Nginx 是异步的。
2.阻塞/非阻塞∶
关注调用者在等待结果返回之前所处的状态阻塞:
blocking,指 IO 操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。
非阻塞:
nonblocking,指 IO 操作被调用后立即返回给用户一个状态值,无需等到 IO 操作彻底完成,最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。