就这一次把网路的几种IO模型以及Nginx基本原理彻底搞清楚( 四 )
2.3 Nginx相关的开源版本1、阿里巴巴Tengine Tengine是由淘宝网发起的Web服务器项目 。 它在Nginx的基础上 , 针对大访问量网站的需求 , 添加了很多高级功能和特性 。
2、openresty OpenResty? 是一个基于 Nginx 与 Lua 的高性能 Web 平台 , 其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项 。 用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关 。
2.4 Nginx高效的原因及原理解析2.4.1 服务器的网络服务模型web服务器和客户端是一对多的关系 , Web服务器必须有能力同时为多个客户端提供服务 。 一般来说完成并行处理请求工作有三种方式:
2.4.1.1 单进程阻塞的网络服务器
文章插图
说明:
1、创建一个socket , 绑定服务器端口(bind) , 监听端口(listen) , 在PHP中用stream_socket_server一个函数就能完成上面3个步骤2、进入while循环 , 阻塞在accept操作上 , 等待客户端连接进入 。 此时程序会进入睡眠状态 , 直到有新的客户端发起connect到服务器 , 操作系统会唤醒此进程 。 accept函数返回客户端连接的socket3、利用fread读取客户端socket当中的数据收到数据后服务器程序进行处理然后使用fwrite向客户端发送响应 。 长连接的服务会持续与客户端交互 , 而短连接服务一般收到响应就会close 。
缺点: 一次只能处理一个连接 , 不支持多个长连接同时处理
2.4.1.2 多进程方式多进程方式指 , 服务器每当收到一个客户端请求时 , 就有服务器主进程生成一个子进程出来和客户端建立连接进行交互 , 直到连接断开该子进程就结束了 。
文章插图
说明:
前面流程一致就不补充了1、程序启动后就会创建N个进程 。 每个子进程进入 Accept , 等待新的连接进入 。 当客户端连接到服务器时 , 其中一个子进程会被唤醒 , 开始处理客户端请求 , 并且不再接受新的TCP连接 。当连接关闭时 , 子进程会释放 , 重新进入 Accept , 参与处理新的连接 。这个模型的优势是完全可以复用进程 , 不需要太多的上下文切换 , 比如php-fpm基于此模型来处理解析php.
多进程方式的优点是设计简单 , 各个子进程相对独立 , 处理客户端请求时彼此不受干扰;
缺点是操作系统生成一个子进程需要进行内存复制等操作 , 在资源和时间上会产生一定的开销;当有大量请求时 , 会导致系统性能下降;
例如:即时聊天程序 , 一台服务器可能要维持数十万的连接 , 那么就要启动数十万的进程来维持 。 这显然不可能
2.4.1.3 多线程方式多线程方式指每当服务器接收到一个请求后 , 会由服务器主进程派生出一个线程出来和客户端进行交互 。 由于操作系统产生出一个线程的开销远远小于一个进程的开销 。 故多线程方式在很大程度上减轻了Web服务器对系统资源的要求 。
缺点:稳定性!假设某个进程突然关闭会造成整个进程中的所有线程都崩溃 。
基于上面的模式我们发现单个进程每次只能通过每次(accept)处理单个请求 , 有没有办法一次性连接多个请求 , 需要的时候再处理呢?
2.4.1.4 单进程IO复用方式
文章插图
说明:
1、保存所有的socket,通过select模型 , 监听socket描述符的可读事件2、Select会在内核空间监听一旦发现socket可读 , 会从内核空间传递至用户空间 , 在用户空间通过逻辑判断是服务端socket可读 , 还是客户端的socket可读3、如果是服务端的socket可读 , 说明有新的客户端建立 , 将socket保留到监听数组当中4、如果是客户端的socket可读 , 说明当前已经可以去读取客户端发送过来的内容了 , 通过fread读取socket内容 , 然后fwrite响应给客户端 。
缺点:稳定性!某个进程或线程出错 , 可能导致大量请求无法处理 , 甚至导致整个服务宕机,单进程对于大量任务处理乏力 。
2.4.1.5 多进程的master-workerIO复用方式2.4.1.5.1 nginx的基本架构
文章插图
1.Nginx启动后 , 会产生一个主进程 , 主进程执行一系列的工作后会产生一个或者多个工作进程2.在客户端请求动态站点的过程中 , Nginx服务器还涉及和后端服务器的通信 。 Nginx将接收到的Web请求通过代理转发到后端服务器 , 由后端服务器进行数据处理和组织;3.Nginx为了提高对请求的响应效率 , 降低网络压力 , 采用了缓存机制 , 将历史应答数据缓存到本地 。 保障对缓存文件的快速访问
- 相片|把照片剪辑成视频的软件哪个好?
- 同轴心配合|用SolidWorks画一个直角传动,画四个零件就行
- 公式|?有人把 5G 讲得这么简单明了
- 敢动|女生最害怕被“偷看”的3软件,QQ不算啥,第二敢动就“翻脸”
- 拍照|iPhone12还没捂热13就曝光了,屏幕、信号、拍照均有升级!
- 短视频平台|大数据佐证,抖音带动三千万就业,视频手机将成生产力工具?
- 基建|深信服何朝曦:离开安全的“新基建”,就是在沙子上盖高楼
- sd|sd卡修复工具有哪些?两个办法就可以搞定了
- 中国|对越南新增投资18亿?把30%的生产线转移?富士康真要跑了?
- wmv|怎么把mp4转wmv?转换视频格式,这样操作很掂