写点什么

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

评论

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

2025年春招:如何使用DeepSeek优化简历,轻松敲开心仪公司的大门

安全乐谷

Java 面试 简历 笔试 春招

AI to B奇点将至,“伙伴+华为”体系如何跨越数智鸿沟?

Alter

2025 年 AppSheet 最佳开源替代品

NocoBase

开源 低代码 零代码 无代码 AppSheet

【灯塔计划】【积微成著】规模化混沌工程体系建设及AI融合探索

京东科技开发者

实测对比|法国AI独角兽公司发布的“最强OCR”,实测效果如何?

合合技术团队

人工智能 算法 OCR #大模型

事务处理对持久统计信息自动收集的影响

GreatSQL

中小企业怎么低成本实现智改数转

积木链小链

数字化转型 智能制造 中小企业

低代码时代来临,中小企业如何抓住数字化转型机遇?

天津汇柏科技有限公司

低代码 数字化转型

芯盾时代全线产品接入DeepSeek 让企业数字化业务更安全

芯盾时代

零信任 DeepSeek

离线VS强制登录?Apipost与Apifox的API工具理念差异深度解析

数据追梦人

CAD如何进行图形统计并导出表格?

在路上

cad cad看图 CAD看图王

字符串替换研究

京东科技开发者

音乐NFT软件项目的性能优化

北京木奇移动技术有限公司

软件外包公司 音乐NFT 体育NFT

混合APP开发框架及性能

北京木奇移动技术有限公司

软件外包公司 APP外包公司 APP外包开发

拼多多商品详情接口(pdd.item_get)

tbapi

拼多多商品详情接口 拼多多API 拼多多商品数据采集

基于控制面单元化的 Kubernetes 集群联邦

字节跳动开源

Kubernetes 多集群管理 控制面单元化 资源调度优化 容灾备份策略

混合APP的性能测试

北京木奇移动技术有限公司

APP开发 混合app开发 软件外包公司

吉卜力风图像席卷社交潮流,GPU正在「融化」

PowerVerse

动画 AI‘’ gpu 算力

人工智能中的RAG技术在测试领域的探索

测试人

人工智能

「DeepSeek-V3 技术解析」:无辅助损失函数的负载均衡

Baihai IDP

AI LLMs Baihai IDP MoE 混合专家模型

感受一下『迅雷』的面试强度

王中阳Go

Go 面试 后端 迅雷

南京大学首上和鲸科技人工智能通识课!校企共育 AI 人才

ModelWhale

人工智能 大数据 教育 高等教育 南京大学

相比于DeepSeek,Manus有哪些优势

老张

大模型 DeepSeek Manus

EDGNEX与Hyperco建立合作关系

财见

音乐 NFT 项目的上线流程

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

【LangChain】一文读懂RAG基础以及基于langchain的RAG实战

京东科技开发者

阿里云 AI 搜索开放平台新发布:增加 QwQ 模型

阿里云大数据AI技术

人工智能 阿里云 强化学习 AI搜索 QwQ

Apple Safari 18.4 - macOS 专属浏览器 (独立安装包下载)

sysin

safari

美国数学奥赛题,六套AI模型得分不足5%!

grandocean

Claude LLM模型 openai o1 QwQ DeepSeek R1 模型

等保整改服务

黑龙江陆陆信息测评部

微信分享的CAD图纸在电脑上打不开是怎么回事?

在路上

cad cad看图 CAD看图王

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