NGINX服务

nginx介绍

事件进程类型

Apache prefork模型:

预派⽣模式,有⼀个主控制进程,然后⽣成多个⼦进程,使⽤select模型,最⼤并发1024,每个⼦进程有⼀个独⽴的线程响应⽤户请求,相对⽐较占⽤内存,但是⽐较稳定,可以设置最⼤和最⼩进程数,是最古⽼的⼀种模式,也是最稳定的模式,适⽤于访问量不是很⼤的场景。
优点:稳定
缺点:⼤量⽤户访问慢,占⽤资源,1024个进程不适⽤于⾼并发场景

Apache woker模型:

⼀种多进程和多线程混合的模型,有⼀个控制进程,启动多个⼦进程,每个⼦进程⾥⾯包含固定的线程,使⽤线程程来处理请求,当线程不够使⽤的时候会再启动⼀个新的⼦进程,然后在进程⾥⾯再启动线程处理请求,由于其使⽤了线程处理请求,因此可以承受更⾼的并发。
优点:相⽐prefork 占⽤的内存较少,可以同时处理更多的请求
缺点:使⽤keepalive的⻓连接⽅式,某个线程会⼀直被占据,即使没有传输数据,也需要⼀直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在⾼并发场景下的⽆服务线程可⽤。(该问题在prefork模式下,同样会发⽣)

Apache event模型:

Apache中最新的模式,2012年发布的apache 2.4.X系列正式⽀持event 模型,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本⾥的已经是稳定可⽤的模式。它和worker模式很像,最⼤的区别在于,它解决了keepalive场景下,⻓期被占⽤的线程的资源浪费问题(某些线程因为在keepalive,空挂在哪⾥等待,中间⼏乎没有请求过来,甚⾄等到超时)。event MPM中,会有⼀个专⻔的线程来管理这些keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执⾏完毕后,⼜允许它释放。这样增强了⾼并发场景下的请求处理能⼒。优点:单线程响应多请求,占据更少的内存,⾼并发下表现更优秀,会有⼀个专⻔的线程来管理keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执⾏完毕后,⼜允许它释放缺点:没有线程安全控制。

IO模型

同步/异步:

关注的是事件处理的消息通信机制,即在等待⼀件事情的处理结果时,被调⽤者是否提供完成通知。
同步:synchronous,调⽤者等待被调⽤者返回消息后才能继续执⾏,如果被调⽤者不提供消息返回则
为同步,同步需要调⽤者主动询问事情是否处理完成。
异步:asynchronous,被调⽤者通过状态、通知或回调机制主动通知调⽤者,即异步会主动返回被调
⽤者的状态给调⽤者。

阻塞/⾮阻塞:

关注调⽤者在等待结果返回之前所处的状态
系统IO模型组合:
同步:进程发出请求调⽤后,内核不提供通知机制,即⽂件IO处理完成后不通知进程,需要进程⾃⼰去问内
核是否处理完成。
异步:进程发出请求调⽤后,内核会在调⽤处理完成后返回调⽤结果给进程,Nginx是异步的。

nginx基础配置

Q.E.D.