
master 和 worker进程
当 Nginx 启动时,会生成主进程(master)和工作进程(worker)。
[root@nginx ~]# ps -ef|grep nginx
root 6324 1 0 09:06 ? 00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginx
nobody 6325 6324 0 09:06 ? 00:00:00 nginx: worker process

worker如何进行工作的
一个 master 和多个 woker 进程的好处:
(1)可以实现 热部署(nginx –s reload )
(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,
继续进行争抢,实现请求过程,不会造成服务中断
- 热更新也是worker或模块化的能力吗?其他的所谓热部署、热更新也是同样的原理?
设置多少个 woker 合适?
worker 数和服务器的 cpu 数相等是最为适宜的。
- 这个原理看起来类似配置线程数。大概就是想正好能完全利用cpu?那如果是多线程、超线程的情况下,应该按线程数还是cpu数分配?
连接数 worker_connection
第一个:发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个
第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?
- 普通的静态访问最大并发数是: worker_connections * worker_processes /2。
- 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *
worker_processes/4。
事件驱动模型
Nginx 的事件驱动模型由事件收集器、发送器和处理器三部分基本单元组成。
事件收集器:收集 worker 进程的各种 IO 请求
事件发送器:将 IO 事件发送到事件处理器
事件处理器:处理各种事件的响应工作
Nginx 事件驱动架构是基于异步及非阻塞的方式,这种设计允许 Nginx 同时处理多个网络请求。
当一个客户端发起请求时,Nginx 会将该请求交给一个工作进程,由工作进程负责处理请求。工作进程采用异步方式处理请求,每个请求在一个单独的工作进程中处理,这样就不会因为一个请求的阻塞而影响其他请求的处理。因些,它可以同时处理多个客户端请求,从而提高了并发处理能力。
非阻塞IO
Nginx 在处理请求时采用了非阻塞 I/O 操作,这意味着它不会在等待 I/O 操作完成时阻塞进程。通过使用非阻塞 I/O,Nginx 可以同时处理多个 I/O 操作,从而提高了整体的处理能力。
如前面的图,事件发送器会将事件放入一个类似待处理的列表中,然后采用非非阻塞 I/O 方式来调用事件处理器来处理这个请求。
这种处理模式我们又将其称为“多路复用 I/O”,最常见的有括这三种:select 模型、poll模型、epoll 模型。
- 学学事件驱动再来看看
内存管理
Nginx 使用了强大内存池技术来管理内存,内存池中的内存块是预先分配的,避免了频繁的内存分配和释放操作,从而减少了内存分配和释放的开销,这样可以使 Nginx 在处理大量并发连接时更加高效。
模块化设计
Nginx 的模块化设计使得它能够根据需求选择和加载不同的模块,以支持各种功能,如日志记录、身份验证等。这种设计灵活性高,便于扩展和维护。
Nginx 的模块主要包括核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块和第三方模块等。这些模块通过事件驱动模型和非阻塞I/O等技术手段,实现了高效地处理大量的并发连接,支持百万级别的并发访问。
Nginx 这种模块化设计使得它可以根据不同的需求去加载不同的模块,从而去支持各种不同的功能,这个设计非常灵活,且便于扩展与维护。
核心模块是Nginx的基础部分,主要实现了底层的自身的一部分通讯协议,也为其他的一些模块和Nginx的进程等内容提供了一个运行时的环境。标准HTTP模块是核心中的一部分,负责定义除配置模块之外的其他模块。可选HTTP模块则提供了更多高级功能,如负载均衡、SSL加密等。邮件服务模块则与邮件相关。第三方模块则是一些由第三方提供的模块,可以扩展Nginx的功能。
总的来说,Nginx 的模块化设计是其高性能、高并发能力的关键因素之一。

57

被折叠的 条评论
为什么被折叠?



