?? 个人简介
?? 作者简介:大家好,我是小鹏linux,运维领域创作者,阿里云ACE认证高级工程师??
?? 个人主页:小鹏linux??
?? 支持我:点赞??+收藏+留言??
??格言:你未必出类拔萃,但一定与众不同!??
?? 系列专栏:
?? 阶段一:windows基础 目前原创16篇
?? 阶段二:Linux基础知识 目前原创38篇
?? 阶段三:shell基础+shell高级 目前原创23篇
?? 阶段四:python基础及自动化应用 目前原创4篇
?? 阶段五:Linux网络服务 目前原创1篇
?? 阶段六:集群原理及架构 原创未开始
?? 阶段七:云计算虚拟化技术 原创未开始
目录
???4.为什么Nginx比其他web服务器并发高(Nginx工作原理)
???实验7:samba服务-网络共享存储(CIFS文件系统)
???实验8:nginx实现https {证书+rewrite}
一. 讲在Nginx之前
1.同步与异步
同步与异步的重点在消息通知的方式上,也就是调用结果的通知方式不同。
**同步:**当一个同步调用发出去后,调用者要一直等待调用的结果通知后,才能进行后续的执行。
**异步:**当一个异步调用发出去后,调用者不必一直等待调用结果的返回,异步调用,要想获得结果,一般有两种方式:
1、主动轮询异步调用的结果;
2、被调用方通过callback(回调通知)来通知调用方调用结果。
1.1实例解释
**同步取快递:**小明收到快递将送达的短信,在楼下一直等到快递送达。
**异步取快递:**小明收到快递将送达的短信,快递到楼下后,小明再下楼去取。
异步取快递,小明知道快递到达楼下有两种方式:
1、不停的电话问快递小哥到了没有,即主动轮询;
2、快递小哥到楼下后,打电话通知小明,然后小明下楼取快递,即回调通知。
**2.**阻塞与非阻塞
阻塞与非阻塞的重点在于进/线程等待消息时候的行为,也就是在等待消息的时候,当前进/线程是挂起状态,还是非挂起状态。
**阻塞:**调用在发出去后,在消息返回之前,当前进/线程会被挂起,直到有消息返回,当前进/线程才会被激活
**非阻塞:**调用在发出去后,不会阻塞当前进/线程,而会立即返回。
2.1实例解释
**阻塞取快递:**小明收到快递即将送达的信息后,什么事都不做,一直专门等快递。
**非阻塞取快递:**小明收到快递即将送达的信息后,等快递的时候,还一边敲代码、一边刷微信。
同步与异步,重点在于消息通知的方式;阻塞与非阻塞,重点在于等消息时候的行为。
所以,就有了下面4种组合方式
- 同步阻塞:小明收到信息后,啥都不干,等快递;
- 同步非阻塞:小明收到信息后,边刷微博,边等着取快递;
- 异步阻塞:小明收到信息后,啥都不干,一直等着快递员通知他取快递;
- 异步非阻塞:小明收到信息后,边刷着微博,边等快递员通知他取快递。
大部分程序的I/O模型都是同步阻塞的,单个进程每次只在一个文件描述符上执行I/O操作,每次I/O系统调用都会阻塞,直到完成数据传输。传统的服务器采用的就是同步阻塞的多进程模型。一个server采用一个进程负责一个request的方式,一个进程负责一个request,直到会话结束。进程数就是并发数,而操作系统支持的进程数是有限的,且进程数越多,调度的开销也越大,因此无法面对高并发。
Nginx采用了异步非阻塞的方式工作。我们先来先了解一下I/O多路复用中的epoll模型。
3.epoll模型
当连接有I/O事件产生的时候,epoll就会去告诉进程哪个连接有I/O事件产生,然后进程就去处理这个事件。
例如:小明家楼下有一个收发室,每次有快递到了,门卫就先代收并做了标记;然后通知小明去取送给小明的快递。
**4.**为什么Nginx比其他web服务器并发高(Nginx工作原理)
Nginx配置use epoll后,以异步非阻塞方式工作,能够轻松处理百万级的并发连接。
**处理过程:**每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到可能发生阻塞的地方。比如向后端服务器转发request,并等待请求返回。那么,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“如果后端服务器返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有新的request 进来,他就可以很快再按这种方式处理。而一旦后端服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。通过这种快速处理,快速释放请求的方式,达到同样的配置可以处理更大并发量的目的。
4.1进程管理上的区别
Apache:
默认采用的是一个主进程 多个工作进程 每个工作进程管理一个线程 每
个线程管理一个连接
并发数 = 工作进程数 x 1
Nginx:
一个主进程 多个工作进程 每个工作进程管理多个线程(最大到65535)
并发数 = 工作进程数 x 单进程开启的线程数
淘宝等电商用的web浏览器 Tengine ,相当与Nginx的换皮,通过nginx开源项目针对电商优化的产品
4.2网络IO模型的选择
Apache:select模型
Nginx:epoll模型
select就是一个简单的选择模型(如排队请求网络资源,第一个人阻塞住第二个人
依然要排着)
epoll更智能的网络管理模型(如排队第一个人阻塞住,会先把第二个人网络的 IO
请求提交出来)
4.3进程的阻塞方式的区别
Apache:同步 阻塞型
Nginx:异步 非阻塞型
4.4模块开发方向不同
Apache:安全模块众多
Nginx:高性能模块众多
总结: