Nginx基础篇(理念)
什么是中间件
Nginx是一个开源且高性能,可靠的HTTP中间件和代理服务,
能使得我们的程序层次性更高,对于有逻辑的请求,中间件也可以起到代理和分发的作用
更多的场景是我们的应用一般需要依赖别的应用进行处理,这个时候就可以先使用应用A请求对应的中间件再由中间件分发给对应的应用C,在大型的网站之中,有了一个一个的中间件的串联,使得我们的网站层次性更高,维护起来也更简单
常见的HTTP中间件服务
HTTPD Apache基金会
IIS - 微软
GWS - Google (google web server) 不对外开放
Nginx特性实现优点
优点一: IO多路复用epoll
串行
- 一个一个的进行处理,前一个如果发生阻塞,后边的就无法完成请求,一直处于等待状态.
IO复用
- 这个时候就需要考虑并行的方式来完成整个IO流的请求,以实现最大的并发和吞吐,使用一个Socket来作为复用整个IO流的请求
- 下图,是IO复用的一种方式-多线程
多路复用
- 多线程的IO流处理,会产生一定的消耗,这个时候,就演进出了IO多路复用,
- 当一个IO流要进行文件处理的时候,要获取一组文件的描述符,当文件的描述符还没有就绪时,那么它就在等待,直到描述符准备就绪,马上上报系统通知的一个机制,告诉应用程序,我已经准备好了,你可以进行操作了,这种方式,就是IO多路复用的方式,
- 定义:多个描述符的I/O操作都能在一个线程并发交替地顺序完成,这就叫I/O多路复用,这里的"复用"指的是复用同一个线程
什么是eopll?
- 常见内核多路复用的模型
- IO多路复用的实现方式select poll epoll
在linux下最早出现的是 select
IO多路复用就是内核态对于IO请求的时候,主动会发送所需要处理的文件对象,文件对象就绪时,会发送对应的文件可用信息给应用,应用在fd没有就绪之前是Block的,当内核态发送可用的fd就绪以后,用户端采用select模式,会一直遍历所维护的fd文件描述符的列表,以等到唤醒对应的进程,去完成对应的数据拷贝,所以在这个过程,select模型采用的是线性遍历方式,这种方式存在一个问题,他会不断地去遍历这里面的内容,从而效率低下
- select的缺点
- 能够监视文件描述符的数量的最大限制(1024)
- 线性扫描效率低下
epoll模型
- 1)每当FD就绪,采用系统的回调函数将FD放入到对应的就绪列表,效率更高.
- 2)没有最大连接数的一个限制.
科普知识:
内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
优点二 轻量级
- 功能模块少 源代码只保留了跟http以及相关核心功能的代码
- 代码模块化 益读
优点三 CPU亲和(affinity)
为什么需要CPU亲和
- 是一种把CPU核心与Nginx工作进程绑定方式,把每个worker进程固定在一个CPU上执行,减少切换CPU的chache miss(缓存泄漏),获得更好的性能
优点四 sendfile
原来 http server服务 要经过内核空间和用户空间 最终到达Socket 通过Socket在传递给Response给客户
静态文件其实是不需要经过用户空间逻辑性的处理 直接就可以通过内核空间进行传输, sendfile正式用了这种方式
待完善…