写点什么

NGINX 如何实现高性能和可扩展性

  • 2015-06-26
  • 本文字数:1035 字

    阅读完需:约 3 分钟

Owen Garrett 是 Nginx 公司的产品总监,他在 Nginx 的官方博客上发表了一篇博文,说明了是哪些设计决策使得 NGINX 产品具备一流的性能和扩展能力。

NGINX 的整体架构的特点是由一组进程协同工作:

  • 主进程:负责执行特权操作,如阅读配置文件、绑定套接字、创建 / 通知协调(Signalling)子进程。
  • 工作进程:负责接收和处理连接请求,读取和写入磁盘,并与上游服务器通信。当 NGINX 处于活跃状态时,只有工作进程是忙碌的。
  • 缓存加载器进程:负责将磁盘高速缓存加载到内存中。这个进程在启动时运行后随即退出。
  • 缓存管理器进程:负责整理磁盘缓存的数据保证其不越界。这个进程会间歇性运行。

NGINX 能够实现高性能和可扩展性的关键取决于两个基本的设计选型:

  • 尽可能限制工作进程的数量,从而减少上下文切换带来的开销。默认和推荐配置是让每个 CPU 内核对应一个工作进程,从而高效利用硬件资源。
  • 工作进程采用单线程,并以非阻塞的方式处理多个并发连接。

NGINX 的每个工作进程通过状态机处理多个连接请求,这个状态机被实现为非阻塞的工作方式:

  • 每个工作进程需要处理若干套接字,包括监听套接字或者连接套接字。
  • 当监听套接字收到新的请求时,会打开一个新的连接套接字来处理与客户端的通信。
  • 当一个事件到达连接套接字时,工作进程迅速完成响应,并转而处理其他任何套接字新收到的事件。

Garrett 说,NGINX 选择这样的设计,使它从根本上区别于其他 Web 服务器。通常的 Web 服务器会选用将每个连接分配给独立线程的模式,这使得多个连接的处理非常容易,因为每个连接可以被认为是包含多个步骤的一个线性序列,但这样会产生上下文切换的开销。事实上,工作线程大部分的时间处于阻塞的状态,在等待客户端或其它上游服务器。当试图执行 I/O 等操作的并发连接数 / 线程数的规模超过一定阈值,或是内存消耗殆尽的时候,上下文切换的成本就显现出来了。

从另一方面讲,NGINX 的设计是不让工作进程阻止网络流量,除非没有任何工作要做。此外,每一个新的连接只消耗很少的资源,仅包括一个文件描述符和少量的工作进程内存。

总的来说,NGINX 的这种工作模式在系统调优后,它的每个工作进程都能够处理成百上千的HTTP 并发连接。

查看英文原文: How NGINX Achieves Performance and Scalability


感谢邵思华对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

2015-06-26 07:498871

评论

发布
暂无评论
发现更多内容

PS人像磨皮美容插件Delicious Retouch Panel (DR5)高级版(Win/Mac)

Rose

简单的MAC地址修改软件:WiFiSpoof 激活中文版

mac大玩家j

Mac软件 网络管理工具 网络地址管理软件

iOS实时查看App运行日志

雪奈椰子

HTTPS可能遇到的安全问题

德迅云安全杨德俊

安全 网站 中间人攻击 HTTPS协议

SD-WAN:推动企业上云的全新路径

Ogcloud

网络 SD-WAN 组网

小企业是否应该采用SD-WAN组网?

Ogcloud

网络 SD-WAN 组网 组网网络

“专业敏捷教练课程” 2024年3月2-3日 · CSP-SM认证周末班【新年特惠】

ShineScrum捷行

敏捷教练 CSP-SM Profession

前端开发Vue3的逻辑复用

伤感汤姆布利柏

开源 Vue 前端 低代码

MySQL常用图形管理工具

小魏写代码

Enfocus PitStop Pro 2022 for Mac(pdf增强插件) v22.0.1378944中文

南屿

vivo 数据库备份恢复系统演化

vivo互联网技术

数据库备份和恢复

九章云极DataCanvas公司两大标杆案例入选《2023大模型落地应用案例集》

九章云极DataCanvas

大模型训练显存优化策略

百度开发者中心

深度学习 大模型 LLM

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队

京东科技开发者

TinyEngine 服务端正式开源啦!!!

OpenTiny社区

开源 前端 低代码

投放户外LED广告屏有什么好处?

Dylan

媒体 广告 网络 消费

提升软件质量的利器:Mock 测试教程

Apifox

前端 前端开发 Mock Mock 服务 Mock.js

ClkLog访谈之1:某大拍卖公司互联网运营经理

ClkLog

U盘病毒查杀工具:USBclean for Mac v3.8激活版

胖墩儿不胖y

Mac软件 清洁工具 USB清洁软件

喜讯!九章云极DataCanvas公司顺利通过ITSS运维二级认证

九章云极DataCanvas

MT7915 and QCA9880: the duo in wireless connectivity

wallysSK

大模型训练中的断点继续训练问题

百度开发者中心

深度学习 大模型

企业如何通过SD-WAN实现异地组网互联?

Geek一起出海

Adobe Camera Raw(PS插件增强工具) Mac/win

Rose

大模型训练在人脸表情识别中的应用

百度开发者中心

深度学习 大模型 LLM

水杉3D建模:Metasequoia 4 Mac激活版 附永久注册码 支持intel/M1/M2

南屿

迪士尼视频下载工具Disney Plus +使用教程

南屿

MES系统中的电子看板:真正实现数字化车间可视化

万界星空科技

MES系统 mes 数据大屏 万界星空科技mes 电子看板

GLM助力通用预训练

百度开发者中心

人工智能 LLM

Sensei for Mac专业的硬盘清理优化工具

南屿

如何使用Redisson实现分布式锁?

王磊

Java 面试题

NGINX如何实现高性能和可扩展性_架构_Sergio De Simone_InfoQ精选文章