50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

评论

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

微财基于Flink构造实时变量池

阿里云大数据AI技术

大数据 flink 流式计算 FFA

零信任产品安全保障能力持续提升

芯盾时代

人工智能 网络安全 信息安全 零信任

当AI邂逅时尚 如何撬动时尚行业新一轮商业变革

第七在线

搜款网VVIC商品列表数据接口(搜款网API系列)

tbapi

搜款网 搜款网API 搜款网商品列表接口 搜款网商品详情接口

鸿蒙APP开发的核心框架

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

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

简单了解中国网络空间安全协会

行云管家

网络安全

漫谈MCU优化:从硬件设计优化到可靠性挑战

DevOps和数字孪生

YashanDB其他模式对象

YashanDB

数据库 yashandb

YashanDB数据完整性

YashanDB

数据库 yashandb

鸿蒙APP的性能优化

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

鸿蒙开发 鸿蒙app 软件外包公司

传统AI不给力!模型自训练优化可以这样玩

鲸品堂

人工智能 企业号 2025年2月PK榜

直播间互动框架性能优化与稳定性实践

百度Geek说

百度 直播 性能优化、

灯塔低代码开发平台与DeepSeek深度融合,共筑AI编程的星辰大海

中烟创新

创意LED显示屏解决方案:点亮未来视界

Dylan

LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家

CRM系统(源码+文档+部署+讲解)

深圳亥时科技

人工智能丨微信搜索“暗藏玄机”?DeepSeek-R1灰度测试背后有何深意?

测试人

UEditorPlus v4.3.0 已知问题修复,表格自适应,全屏编辑优化

ModStart

【天池训练营之大模型第一课】Data-juicer系列学练赛火热开启!

阿里云天池

多 Agent 协作,效果如何评估?

Baihai IDP

程序员 AI Baihai IDP AI Agents 智能体评估

CRM管理系统(源码+文档+部署+讲解)

深圳亥时科技

如何在保障精度的同时,轻量级部署DeepSeek?

华为云开发者联盟

人工智能 大模型 昇腾 模型量化 MindStudio

CRM管理系统(源码+文档+部署+讲解)

深圳亥时科技

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