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

2019 年 3 月 21 日 架构文摘

来源:公众号分布式存储 缓存 高性能

作者:李航


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进程

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


框架模型:



框架模型流程:



框架模型流程:



核心流程图:



核心流程图:



http请求流程:



Upstream设计:


  • 访问第三方Server服务器

  • 底层HTTP通信非常完善

  • 异步非阻塞

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

  • 支持自定义模块开发



upstream流程:



4. Nginx定制化模块开发


Nginx的模块化设计特点:


  • 高度抽象的模块接口

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

  • 配置模块的设计

  • 核心模块接口的简单化

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



核心模块:



handler模块:


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



filter模块:

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



upstream模块:

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



load_balance:


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



ngx_lua模块:


  • 脚本语言

  • 内存开销小

  • 运行速度快

  • 强大的 Lua 协程

  • 非阻塞

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


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。


-END-


架构文摘

ID:ArchDigest

互联网应用架构丨架构技术丨大型网站丨大数据丨机器学习

更多精彩文章,请点击下方:阅读原文

登录查看更多
0

相关内容

Nginx(发音同 engine x)是一款由俄罗斯程序员 Igor Sysoev 所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。Nginx相较于 Apache、lighttpd 具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。
【IJCAI2020-华为诺亚】面向深度强化学习的策略迁移框架
专知会员服务
27+阅读 · 2020年5月25日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
轻量级神经网络架构综述
专知会员服务
96+阅读 · 2020年4月29日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
37+阅读 · 2020年4月26日
【论文扩展】欧洲语言网格:概述
专知会员服务
6+阅读 · 2020年3月31日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
注意力机制模型最新综述
专知会员服务
266+阅读 · 2019年10月20日
滴滴离线索引快速构建FastIndex架构实践
InfoQ
21+阅读 · 2020年3月19日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
一张图理清电商后台产品模块,90%的电商类产品后台都适用
人人都是产品经理
8+阅读 · 2018年12月9日
手把手 | 关于商业部署机器学习,这有一篇详尽指南
【人工智能架构】深度解密京东登月平台基础架构
产业智能官
11+阅读 · 2017年9月26日
开源巨献:阿里巴巴最热门29款开源项目
算法与数据结构
5+阅读 · 2017年7月14日
A Sketch-Based System for Semantic Parsing
Arxiv
4+阅读 · 2019年9月12日
Arxiv
12+阅读 · 2019年1月24日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
6+阅读 · 2018年2月24日
VIP会员
相关VIP内容
【IJCAI2020-华为诺亚】面向深度强化学习的策略迁移框架
专知会员服务
27+阅读 · 2020年5月25日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
轻量级神经网络架构综述
专知会员服务
96+阅读 · 2020年4月29日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
37+阅读 · 2020年4月26日
【论文扩展】欧洲语言网格:概述
专知会员服务
6+阅读 · 2020年3月31日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
注意力机制模型最新综述
专知会员服务
266+阅读 · 2019年10月20日
相关资讯
滴滴离线索引快速构建FastIndex架构实践
InfoQ
21+阅读 · 2020年3月19日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
一张图理清电商后台产品模块,90%的电商类产品后台都适用
人人都是产品经理
8+阅读 · 2018年12月9日
手把手 | 关于商业部署机器学习,这有一篇详尽指南
【人工智能架构】深度解密京东登月平台基础架构
产业智能官
11+阅读 · 2017年9月26日
开源巨献:阿里巴巴最热门29款开源项目
算法与数据结构
5+阅读 · 2017年7月14日
Top
微信扫码咨询专知VIP会员