Nginx的事件驱动架构

来源:互联网 发布:男发型设计软件 编辑:程序博客网 时间:2024/05/17 23:37

        事件驱动架构:由一些事件发生源来产生事件,由一个或多个事件收集器来收集、分发事件,然后许多事件处理器会注册自己感兴趣的事件,同时会消费这些事件。

        对于Nginx Web服务器而言,一般会由网卡、磁盘产生事件,事件模块将负责事件的收集、分发操作,而所有的模块都可能是事件消费者,它们首先需要向事件模块注册感兴趣的事件类型,在有事件产生时,事件模块会把事件分发到相应的模块中进行处理。

        传统Web服务器,采用的事件驱动往往局限在TCP连接建立、关闭事件上,一个连接建立后,在其关闭之前所有的操作都不再是事件驱动,这时就会退化成按序执行每个操作的批处理模式,这样每个请求在连接建立后都将始终占用着系统资源,直到连接关闭才会释放资源。如果整个事件消费者进程只是等待某个条件而已,则会造成服务器资源的极大浪费,影响了系统可以处理的并发连接数。如图所示:

 

       Nginx不会使用进程或线程来作为事件消费者,所谓的事件消费者只能是某个模块。只有事件收集、分发器才会占用进程资源,在分发某个事件时调用事件消费者模块使用当前占用的进程资源。如图所示:

 

      传统的Web服务器与Nginx间的重要差别:前者是每个事件的消费者独占一个进程资源,后者的事件消费者只是被事件分发者进程短期调用而已。Nginx的处理事件的架构设计使得网络性能、用户感知的请求时延都得到了提升。但是这要求每个事件的消费者都不能有阻塞行为,否则会长事件占用事件分发者进程而导致其他事件得不到及时响应。

 

      文章引自《深入理解Nginx 模块开发与架构解析》

 

0 0
原创粉丝点击