Nginx的框架设计—进程模型
在这之前,我们首先澄清几点事实:
nginx作为一个高性能服务器的特点,其实这也是所有的高性能服务器的特点,依赖epoll系统调用的高效(高效是相对select/poll这些系统调用的,底层有一个链表和红黑树,避免了轮询,减少了用户空间和系统空间之间的数据传递等),非阻塞(所有的操作都是非阻塞,这样),多进程(master-slave进程模型),这些事实使得nginx成为一个高性能服务器的前提条件。
既然作为一个软件(http服务器),相对于一个网络库而言肯定有更完善的功能。它可以在不需要关闭的前提下实现更新系统;可以接受外部的信号,根据不同的信号做相应的处理;可定制,用户可以开发第三方的模块,根据自我需要将模块添加到7个处理阶段(HTTP请求本来是有11个阶段,但是其中的4个阶段是不支持添加用户自定义的模块的),它可以作为反向代理;它是可以支持高并发的,它的工作模式是基于配置文件的,一个配置文件决定了nginx的工作模式,配置文件解析完成也就完成了初始化的所有工作,配置文件的解析在nginx中占了举足轻重的地位。基于上述几点事实慢慢阐述nginx的设计理念。
首选从大的框架说起,既然是多进程,那么如何分配各个进程的任务,针对CPU的核数来开启进程数目(当然是否为多进程可以通过配置文件来配置的),分为master-worker模型,master负责开启worker进程,master进程负责和worker进程通信,master进程负责接收外部