Nginx服务器架构

简介:

=====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内核。



本文转自 Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1958889

相关文章
|
8月前
|
缓存 tengine 负载均衡
反向代理、负载均衡!优秀的 Nginx 是如何做到的?
反向代理、负载均衡!优秀的 Nginx 是如何做到的?
|
18天前
|
负载均衡 JavaScript 前端开发
Nginx实现反向代理、负责均衡、动静分离
Nginx实现反向代理、负责均衡、动静分离
|
5月前
|
负载均衡 前端开发 应用服务中间件
Linux之Nignx及负载均衡&动静分离
Linux之Nignx及负载均衡&动静分离
146 0
|
4月前
|
缓存 负载均衡 应用服务中间件
linux之Nignx及负载均衡&动静分离
linux之Nignx及负载均衡&动静分离
291 0
|
5月前
|
缓存 负载均衡 应用服务中间件
带你了解Linux中的【Nignx及负载均衡&动静分离】
带你了解Linux中的【Nignx及负载均衡&动静分离】
142 0
|
5月前
|
负载均衡 前端开发 应用服务中间件
Nignx及负载均衡&动静分离
Nignx及负载均衡&动静分离
29 0
|
运维 负载均衡 网络协议
部署haproxy代理,搭建基于nginx的高性能反向代理群集
部署haproxy代理,搭建基于nginx的高性能反向代理群集
439 0
部署haproxy代理,搭建基于nginx的高性能反向代理群集
|
负载均衡 算法 前端开发
nginx作为负载均衡服务器应用案例
一、负载均衡算法 二、常见的nginx应用架构以及几个故障排除案例
nginx作为负载均衡服务器应用案例
|
弹性计算 应用服务中间件 Linux
nginx服务器搭建以及配置
nginx服务器搭建以及配置
1049 1