Nginx 原理和架构 | 原力计划

2019 年 12 月 25 日 CSDN

作者 | albon_arith
责编 | Elle
出品 | CSDN 博客

Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。


Nginx 的整体架构


Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处理网络请求与响应。

master进程主要用来管理worker进程,具体包括如下4个主要功能:

  1. 接收来自外界的信号。

  2. 向各worker进程发送信号。

  3. 监控woker进程的运行状态。

  4. 当woker进程退出后(异常情况下),会自动重新启动新的woker进程。

woker进程主要用来处理基本的网络事件:

  1. 多个worker进程之间是对等且相互独立的,他们同等竞争来自客户端的请求。

  2. 一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。

  3. worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。同时,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。


Ngnix 是如何实现高性能的?


事件驱动模型

基于异步及非阻塞的事件驱动模型,可以说是 Nginx 得以获得高并发、高性能的关键因素。这一点上和 Netty 类似,底层都是使用的 BSD kqueue、Linux epoll 及 Solaris event ports。

多进程机制

使用多进程的好处有两点:

  1. 进程之间不共享资源,不需要加锁,减少了使用锁对性能造成的影响,同时降低编程的复杂度,降低开发成本。

  2. 采用独立的进程,可以让进程互相之间不会影响,如果一个进程发生异常退出时,其它进程正常工作,master 进程则很快启动新的 worker 进程,确保服务不会中断,从而将风险降到最低。

内存池

为了避免出现内存碎片,减少向操作系统申请内存的次数、降低各个模块的开发复杂度,Nginx 设计了简单的内存池,它的作用主要是把多次向系统申请内存的操作整合成一次,这大大减少了 CPU 资源的消耗,同时减少了内存碎片。


模块化设计


高度模块化的设计是 Nginx 的架构基础。Openresty 就是在 Nginx 上引入了 lua 等第三方模块,使得扩展更加方便了。

文:https://blog.csdn.net/hustspy1990/article/details/102989305

【End】

热 文 推 荐 

Google Reader 干掉了 RSS!

华为辟谣将发布石墨烯电池手机;梁建章回应携程杀熟;GitLab 12.6 发布 | 极客头条

为什么我们最终抛弃 Chromium 选择了 Firefox ?

你的 App 在 iOS 13 上被卡死了吗?

Hinton、吴恩达们也“吹牛”炒作?媒体和研究人员共谋,AI圈误导信息泛滥

2019 最烂密码排行榜大曝光!网友:已中招!

如何用Redis实现微博关注关系?

不用失去控制权和所有权,也能在区块链中通过数据共享获得奖励?

点击阅读原文,即刻参加!

你点的每个“在看”,我都认真当成了喜欢
登录查看更多
0

相关内容

Nginx(发音同 engine x)是一款由俄罗斯程序员 Igor Sysoev 所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。Nginx相较于 Apache、lighttpd 具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。
【干货书】现代数据平台架构,636页pdf
专知会员服务
250+阅读 · 2020年6月15日
【IJCAI2020-华为诺亚】面向深度强化学习的策略迁移框架
专知会员服务
25+阅读 · 2020年5月25日
华为发布《自动驾驶网络解决方案白皮书》
专知会员服务
122+阅读 · 2020年5月22日
轻量级神经网络架构综述
专知会员服务
95+阅读 · 2020年4月29日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
35+阅读 · 2020年4月26日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
65+阅读 · 2020年3月9日
滴滴离线索引快速构建FastIndex架构实践
InfoQ
21+阅读 · 2020年3月19日
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
数据库之架构:主备+分库?主从+读写分离?
架构文摘
8+阅读 · 2019年4月23日
手把手 | 关于商业部署机器学习,这有一篇详尽指南
【人工智能架构】深度解密京东登月平台基础架构
产业智能官
11+阅读 · 2017年9月26日
Arxiv
11+阅读 · 2019年4月15日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
6+阅读 · 2018年3月19日
VIP会员
相关VIP内容
【干货书】现代数据平台架构,636页pdf
专知会员服务
250+阅读 · 2020年6月15日
【IJCAI2020-华为诺亚】面向深度强化学习的策略迁移框架
专知会员服务
25+阅读 · 2020年5月25日
华为发布《自动驾驶网络解决方案白皮书》
专知会员服务
122+阅读 · 2020年5月22日
轻量级神经网络架构综述
专知会员服务
95+阅读 · 2020年4月29日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
35+阅读 · 2020年4月26日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
65+阅读 · 2020年3月9日
相关资讯
滴滴离线索引快速构建FastIndex架构实践
InfoQ
21+阅读 · 2020年3月19日
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
数据库之架构:主备+分库?主从+读写分离?
架构文摘
8+阅读 · 2019年4月23日
手把手 | 关于商业部署机器学习,这有一篇详尽指南
【人工智能架构】深度解密京东登月平台基础架构
产业智能官
11+阅读 · 2017年9月26日
Top
微信扫码咨询专知VIP会员