进程结构 - 图1

多进程结构

Nginx 采用了多进程结构,而非单进程多线程结构的原因,是因为线程之间的影响容易降低服务器的可靠性

Master Process

master 进程被设计用来的目的是做 worker 进程的管理的,也就是所有的 worker 进程是处理真正的请求的,而 master 进程负责

  • 监控每个 worker 进程是不是在正常的工作
  • 需不需要做重新载入配置文件
  • 需不需要做热部署

主要用于管理下面的子进程,不处理任何外来事务。

  • 会负责监听子进程,当自进程发生错误时,会作出相应的响应。比如 Work Process 挂掉了,Master Process 会尝试重新启动对应的 Work Process。
  • 监听配置文件的修改,当配置文件发生修改后,Master Process 会通知 Work Process 拿新的配置文件生效。(热部署)

**
不允许轻易修改,即便是第三方模块想自定义修改 Master Process,其实也是不推荐的。

Worker Process

正常情况下,Worker Process 数量又宿主机的芯片核数来决定,可以提高缓冲的命中率等。当然可以通过配置文件来重新配置(worker_processes)

….(待补充)

Cache Manager

缓存的管理

Cache Loader

缓存的载入

Cache

而 cache (缓存)是在多个 worker 进程间共享的,而且缓存不仅要被 worker 进程使用,还要被 cache manager 和 cache loader进程 使用。 cache manager 和 cache loader 也是为反向代理时,后端发来的动态请求做缓存所使用的,cache loader 只是用来做缓存的载入、cache manager 用来做缓存的管理。实际上每个请求处理时,使用到缓存还是由 worker 进程来进行的。 这些进程间的通讯,都是使用共享内存来解决的。可以看到cache manager 和 cache loader各有一个进程,master 进程因为是父进程,所以肯定只有一个。那么 worker 进程为什么会有很多呢?这是因为 Nginx 采用了事件驱动引擎以后,他希望每一个 worker 进程从头到尾占有一颗CPU,所以往往不止要把 worker 进程的数量配置与我们服务器上的 CPU核数一致以外,还需要把每一个worker进程与某一颗CPU核绑定在一起,这样可以更好的使用每颗CPU核上面的CPU缓存来减少缓存失效的命中率。

参考