=====Nginx服务器架构=====
=== 模块化结构 ===
1、模块化设计的原则:
单一职责原则、自顶向下,逐步求精原则,高内聚,低耦合原则
2、nginx涉及到的模块分为:核心模块、标准模块、HTTP模块、可选HTTP模块、邮件服务模块、第三方模块。
=== nginx服务器的web请求处理机制 ===
1、web服务器与客户端是一对多的关系,web服务器必须有能力同时为多个客户端提供服务。
一般来说,完成并行处理请求工作有三种方式可供选择:多进程方式、多线程方式和异步方式。
|
概念 |
优点 |
缺点 |
---|---|---|---|
多进程方式 | server每接受到一个client请求,就由主进程生成一个子进程出来 和客户端建立连接进行交互,直到连接断开,该子进程就结束了。 |
各子进程相互独立,处理请求时互不干扰这保证了提供服务 的稳定性,子进程退出时资源被回收业不会留下任何垃圾 |
对系统资源造成压力 使系统性能下降 |
多线程方式 | server每接受到一个client请求,就由主进程派生一个子线程出来 和客户端进行交互 |
减轻了对系统资源的消耗 | 多个线程彼此互相影响,开发者要自己 对内存进行管理,增加出错的风险 |
异步方式 | 异步阻塞:发送方发生请求给接收方后,不必等待响应,可以干 其它事,接受方处理请求时进行的IO操作如果不能马上得到结果 ,就一直等到返回结果后,才响应发送方。 异步非阻塞:接受方处理请求时进行的IO操作如果不能马上得到 结果,也不等待,而是马上返回去做其他事,当IO操作完成以后 ,将完成状态通知接收方,接收方再响应发送方。 |
异步非阻塞:效率最高 |
异步阻塞:效率低 |
2、nginx服务器的一个很显著的优势是能够同时处理大量并发请求,它结合多进程机制和异步机制(异步非阻塞)对外提供服务。
3、Nginx服务器的进程模型有两种:Single模型(单进程模型)和Master-Worker(Master-Slave),所有工作进程都用于接收和处理客户端的请求。
4、nginx服务器的事件处理机制:
=== Nginx服务器架构 ===
1、nginx服务器的进程:
主进程:Nginx服务器启动时运行的主要进程
工作进程:由主进程生成、生存与主机程的整个生命周期,它是nginx服务器提供web服务,处理客户端请求的主要进程,完成了nginx服务器的主体工作。因此我们要重点监视工作进程的运行状态,保证nginx服务器对外提供稳定的服务。
缓存索引重建及管理进程:缓存索引重建进程在nginx服务器启动一段时间后(默认1分钟),由主进程生成;缓存索引管理进程存在于主进程的整个生命周期
2、进程的交互:
Master-Worker:通过管道
Worker-Worker:通过主进程
=====Nginx服务器高级配置=====
nginx服务器的配置应结合实际运行环境(服务器运行的操作系统及硬件环境)进行配置。针对不同的网络负载环境选择相匹配的硬件环境。
1、针对IPv4的linux内核参数优化配置
net.core.netdev_max_backlog :设置允许发送到队列的数据包的最大数目,默认128
net.core.somaxcon:配置系统同时打开的TCP连接数,默认128
net.ipv4.tcp_max_orphans:设置系统最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上。超过这个数,没关联的TCP套接字立即被复位,同时给出警告信息。可以防止简单的Dos。
net.ipv4.tcp_timestamps:是否禁用对tcp时间戳的支持,不禁用的话,时间戳必须得是一个增值,若出现后一个时间戳比前一个小,系统就会认为有错,拒绝接受。针对nginx来说,建议将其关闭net.ipv4.tcp_timestamps = 0。
2、针对网络的配置
worker_processes:最好设置为cpu内核个数的倍数,这个数并不是越大越好,太大会增加主进程调度负担,也可能影响系统的IO效率。
worker_cpu_affinity:设置为每个工作进程分配的CPU工作内核,指令值是由几组二进制值表示的。每组表示一个工作进程,每位表示该进程使用cpu内核的情况,1使用,0不使用。
例:worker_cpu_affinity 0001 0100 1000 0010; 0001表示第一个进程使用第一个cpu内核,0100表示第二个进程使用第二个cpu内核。