56

nginx 架构及核心流程及模块介绍

 5 years ago
source link: https://mp.weixin.qq.com/s/kom5Qb2lL5ykfqLOhTQM8w?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1. Nginx简介以及特点

Nginx简介:

Nginx (engine x) 是一个高性能的web服务器和反向代理服务器,也是一个IMAP/POP3/SMTP服务器

- 俄罗斯程序员Igor Sysoev于2002年开始

- Nginx是增长最快的Web服务器,市场份额已达33.3%

- 全球使用量排名第二2011年成立商业公司

Nginx社区分支:

- Openresty作者@agentzh(章宜春)开发的,最大特点是引入了ngx_lua模块,支持使用lua开发插件,并且集合了很多丰富的模块,以及lua库。

- Tengine主要是淘宝团队开发。特点是融入了因淘宝自身的一些业务带来的新功能。

- Nginx官方版本,更新迭代比较快,并且提供免费版本和商业版本。

Nginx源码结构:

  • 代码量大约11万行C代码

  • 源代码目录结构

    • core (主干和基础设置)

    • event (事件驱动模型和不同的IO复用模块)

    • http (HTTP服务器和模块)

    • mail (邮件代理服务器和模块)

    • os (操作系统相关的实现)

    • misc (杂项)

Nginx特点:

  • 反向代理,负载均衡器

  • 高可靠性、单master多worker模式

  • 高可扩展性、高度模块化

  • 非阻塞

  • 事件驱动

  • 低内存消耗

  • 热部署

2. Nginx应用场景

场景如下:

  • 静态文件服务器

  • 反向代理,负载均衡

  • 安全防御

  • 智能路由(企业级灰度测试、地图POI一键切流)

  • 灰度发布

  • 静态化

  • 消息推送

  • 图片实时压缩

  • 防盗链

3. Nginx框架模型及流程介绍

进程组件角色:

  • master进程

    • 监视工作进程的状态

    • 当工作进程死掉后重启一个新的

    • 处理信号和通知工作进程

  • worker进程

    • 处理客户端请求

    • 从主进程处获得信号做相应的事情

  • cache loader进程

    • 加载缓存索引文件信息,然后退出

  • cache manager进程

    • 管理磁盘的缓存大小,超过预定值大小后最少使用数据将被删除

框架模型:

zYjemqm.jpg!web

框架模型流程:

aYRbAvz.jpg!web

框架模型流程:

3aEB3mZ.jpg!web

EjUFFbn.jpg!web

核心流程图:

RJbmyij.jpg!web

vQnABvn.jpg!web

核心流程图:

RzU3au2.jpg!web

NZni2ui.png!web

http请求流程:

rQ7FFvA.jpg!web

nmUbyaf.jpg!web

Upstream设计:

  • 访问第三方Server服务器

  • 底层HTTP通信非常完善

  • 异步非阻塞

  • 上下游内存零拷贝,节省内存

  • 支持自定义模块开发

2yuUBbn.png!web

upstream流程:

yqqmMvR.jpg!web

EZFfyeB.jpg!web

4. Nginx定制化模块开发

Nginx的模块化设计特点:

  • 高度抽象的模块接口

  • 模块接口非常简单,具有很高的灵活性

  • 配置模块的设计

  • 核心模块接口的简单化

  • 多层次、多类别的模块设计

JBjEZzY.jpg!web

核心模块:

VzeaMj2.jpg!web

handler模块:

- 接受来自客户端的请求并构建响应头和响应体。

vq2UBzB.png!web

filter模块:

- 过滤(filter)模块是过滤响应头和内容的模块,可以对回复的头和内容进行处理。它的处理时间在获取回复内容之后,向用户发送响应之前。

BVnuqeq.png!web

upstream模块:

- 使nginx跨越单机的限制,完成网络数据的接收、处理和转发,纯异步的访问后端服务。

JjmAziM.jpg!web

load_balance:

- 负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。

ZnEJBvA.jpg!web

ngx_lua模块:

  • 脚本语言

  • 内存开销小

  • 运行速度快

  • 强大的 Lua 协程

  • 非阻塞

  • 业务逻辑以自然逻辑书写

UZZfQj7.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK