Nginx 为什么是高效服务器,架构设计是怎样的?

一、Nginx 简介Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx , 它的发音为“engine X” , 是一个高性能的 HTTP 和反向代理服务器 , 同时也是一个 IMAP/POP3/SMTP 代理服务器 。
Nginx 因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是 Apache2.2+mod_proxy_balancer 的轻量级代替者 , 不仅是因为响应静态页面的速度非常快 , 而且它的模块数量达到 Apache 的近 2/3 。对 proxy 和 rewrite 模块的支持很彻底 , 还支持 mod_fcgi、ssl、vhosts  , 适合用来做 mongrel clusters 的前端 HTTP 响应 。
目前 Nginx 在国内很多大型企业都有应用 , 且普及率呈逐年上升趋势 。选择 Nginx 的理由也很简单:
第一 , 它可以支持 5W 高并发连接;
第二 , 内存消耗少;
第三 , 成本低 。
 
Nginx 在架构中发挥的作用:
网关
---面向客户的总入口 。
虚拟主机
---一台机器为不同的域名/ip/端口提供服务
路由
---使用反向代理 , 整合后续服务为一个完整业务
静态服务器
---mvvm 模式中 , 用来发布前端 html/css/js/img
负载集群
---使用 upstream , 负载多个 Tomcat
二、Nginx特点与其他web服务器相比 , Nginx特点:
1、速度快
nginx使用预读、连接池、内存池等技术 , 使得单次HTTP请求速度更快 。
2、扩展性好
Nginx的结构是“核心+模块”的结构 , Nginx本身就是一个Epool或Kqueue的事件处理和分发架构 , 后面会讲到模块知识 。
【Nginx 为什么是高效服务器,架构设计是怎样的?】3、高可靠性
Nginx的核心由一个任务很轻的管理进程(master进程)和若干工作进程(worker进程)组成 。具体的HTTP请求在工作进程内负载均衡 , 如果某个工作进程异常终止了 , 管理进程会迅速重启一个新的工作进程接替该进程 。
4、低内存占用
一般情况下 , 10000个非活跃HTTP保活连接仅占用2.5MB内存 。ngx_lua每扩展10000个连接也仅占2.xMB内存 。
5、高并发能力
部署在万级以上的场合下 。
Nginx全异步、非阻塞I/O的思想贯彻在核心、模块以及ngx_lua 模块中 , 无论是自己实现的模块 , 还是通过lua实现的脚本代码 , 都是非阻塞的高速运行 。
6、热部署
由于Nginx的管理进程和工作进程是分开设计的 , 所以能够实现热部署功能 。也就是系统不间断的情况下升级可执行程序 , 更新配置文件 , 更新日志 。
7、开源
 
三、Nginx 架构设计高度模块化的设计是 Nginx 的架构基础 。Nginx 服务器被分解为多个模块 , 每个模块就是
一个功能模块 , 只负责自身的功能 , 模块之间严格遵循“高内聚 , 低耦合”的原则 。
 

Nginx 为什么是高效服务器,架构设计是怎样的?

文章插图
Nginx 模块图
 
核心模块
核心模块是 Nginx 服务器正常运行必不可少的模块 , 提供错误日志记录、配置文件解析、
事件驱动机制、进程管理等核心功能 。
标准 HTTP 模块
标准 HTTP 模块提供 HTTP 协议解析相关的功能 , 如:端口配置、网页编码设置、HTTP
响应头设置等 。
可选 HTTP 模块
可选 HTTP 模块主要用于扩展标准的 HTTP 功能 , 让 Nginx 能处理一些特殊的服务 , 如:
Flash 多媒体传输、解析 GeoIP 请求、SSL 支持等 。
邮件服务模块
邮件服务模块主要用于支持 Nginx 的邮件服务 , 包括对 POP3 协议、IMAP 协议和
SMTP 协议的支持 。
第三方模块
第三方模块是为了扩展 Nginx 服务器应用 , 完成开发者自定义功能 , 如:Json 支持、Lua
支持等 。




    推荐阅读