AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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:499198

评论

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

使用Chat2DB连接金仓数据库KingbaseES

金仓技术

KingbaseES 金仓数据库

ESXi 8.0U3e 重大更新发布,修复 150 多个已知问题

sysin

esxi

CAD背景遮罩使用方法

极客天地

从关键词到流量闭环,AI 自动 SEO 如何一步到位?

极客天地

BeeWorks Meet:私有化部署的视频会议利器,安全高效助力企业协作

BeeWorks

WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑

sysin

WPS Office

CAD提示无法更新实体填充

极客天地

如何使用Ksql 连接金仓数据库KingbaseES

金仓技术

KingbaseES 金仓数据库

使用Nagios监控金仓数据库KingbaseES

金仓技术

KingbaseES 金仓数据库

使用PawSQL连接金仓数据库

金仓技术

KingbaseES 金仓数据库

问界M8正式发布:车载小艺一路聊,随时随地问问小艺

新消费日报

金仓数据库KingbaseES安装指南(Linux环境)

金仓技术

数据库· KingbaseES 金仓数据库

一图读懂金仓集中运维管控一体化平台KOPS

金仓技术

KingbaseES 金仓数据库

一图看懂金仓快速开发与运维平台KES Plus

金仓技术

KingbaseES 金仓数据库

VMware vCenter Server 8.0U3e 新增功能简介

sysin

vcenter

备份空间不够用?金仓数据库破局!

金仓技术

KingbaseES 金仓数据库

基于 Trae 的单细胞 RNA 测序分析与可视化

火山引擎开发者社区

火山引擎 RNA

有没有适合企业用的局域网即时通讯聊天工具?

BeeWorks

MCP 正当时:FunctionAI MCP 开发平台来了!

阿里巴巴云原生

阿里云 云原生 MCP

一图读懂金仓企业级分布式数据库KES Sharding

金仓技术

KingbaseES 金仓数据库

从繁忙到真正高效:为何资源效率正在扼杀你的产出

ShineScrum

敏捷

为什么企业要用私有化部署的Im即时通讯软件?

BeeWorks

手把手教你安装部署金仓数据库 KingbaseES

金仓技术

数据库· KingbaseES 金仓数据库

iVX:引领图形化编程与 AI 融合的开发革命

代码制造者

无代码开发

内网局域网部署的聊天软件BeeWorks优势分析

BeeWorks

聊聊软件生命周期中的度量指标(附《软件研发效能度量规范》下载)

思码逸研发效能

研发管理 研发效能 效能管理 思码逸 研发指标

如何通过KStudio连接金仓数据库KingbaseES

金仓技术

KingbaseES 金仓数据库

KingbaseES+SqlSugar为医疗用户排忧解难

金仓技术

KingbaseES 金仓数据库

上海人工智能实验室OpenDataLab&和鲸举办大模型赋能科研分享会

ModelWhale

大模型 科研 经济管理 minerU

Zookeeper 可观测性最佳实践

观测云

【工业数据技术研讨会】4.26 广州 | 国产开源数据库技术交流,错过再等一年!

Apache IoTDB

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