Nginx是采用master进程 + 多个worker进程 +多路复用I/O事件处理器的架构
Master进程:
创建监听socket
创建worker子进程,之后的主要动作就是监控子进程的工作状态
Worker进程的主循环:
更新当前时间
查看当前监听的事件是否被触发,如有调用相应的处理函数进行处理
处理超时连接
master负责创建监听套接字,同时也是worker的父进程
master进程直接控制worker进程 worker进程不受客户干预
master进程监控worker子进程之外,还处理客户的控制指令,统一由它分发给worker子进程
worker进程的负载均衡问题:
由于各个worker进程之间相互独立,由内核协议栈统一将接收的新连接分发给各个worker子进程进行处理,很可能出现有些子进程处理的连接多,有些处理的少----即负载不均衡
Nginx中,子进程每次接收一个新连接,会根据当前该进程的连接数量,更新一个阙值,由这个阙值决定是否该暂缓接收的连接 这样,各个子进程之间有一个相对的均衡Nginx中还对accept操作做了加锁,任意时刻只可能有一个子进程可以接收新的连接,避免惊群现象的出现。
Jan6