您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 系统/运维 > 正文

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

发表于:2020-01-02 作者:JAVA破局之路 来源:今日头条

一、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的事件处理和分发架构,后面会讲到模块知识。

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

支持等。