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

评论

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

缺陷管理的全面剖析:从发现到修复,优化软件产品质量

测吧(北京)科技有限公司

测试

如何建立一个完善的缺陷管理流程?

测吧(北京)科技有限公司

测试

解读MySQL8.0数据字典重构源码

华为云开发者联盟

MySQL 数据库 innodb 数据字典

聊聊性能基准测试和容量评估规划

老张

性能测试 容量规划 基准测试

《华为云DTSE》期刊免费下载:10个案例读懂云上架构升级策略

华为云开发者联盟

php 元宇宙 人工智能’ 华为云DTSE 云原生‘’

DORA指标实施反模式:如何避免正确实施DORA

俞凡

DevOps 最佳实践 DORA

软件缺陷处理为什么那么重要?

测吧(北京)科技有限公司

测试

线上事故案例集:从分析到预防的全方位指南

巧手打字通

后端 事故 风险管理 事故复盘 安全研发

基于LangChain手工测试用例转App自动化测试生成工具

测吧(北京)科技有限公司

测试

“2024年网络安全国家标准贯标深度行(互联网行业—百度站)”活动在北京举办

百度安全

缺陷修复之后如何做验证?

测吧(北京)科技有限公司

测试

如何构建高效的用例管理平台:测试过程的全面优化

测吧(北京)科技有限公司

测试

人工智能 | 基于ChatGPT开发人工智能服务平台

测吧(北京)科技有限公司

测试

ChatGPT 订阅价或涨到 44 美元;研究称 AI 可 100% 绕过 reCAPTCHA V2 验证丨RTE 开发者日报

声网

2024 百度安全月圆满收官:让百度更安全,让用户更放心

百度安全

用实力说话!望繁信科技与创鑫激光达成战略合作

望繁信科技

数字化转型 流程挖掘 流程资产 流程智能

Volcano新版本发布:10大功能提升统一调度和细粒度资源管理能力

华为云开发者联盟

Volcano 批量计算 云原生‘’ #GPU kubernetes pod

这些售后管理的问题,你遇到过多少?

天津汇柏科技有限公司

低代码 软件定制开发 售后 AI 人工智能

TDengine 流计算与窗口机制的深度解析:揭示计数窗口的关键作用

TDengine

数据库 tdengine 时序数据库

ECCV 2024 | 融合跨模态先验与扩散模型,快手处理大模型让视频画面更清晰!

快手技术

音视频开发 大模型

融云出海城市沙龙干货分享:电商、社交泛娱的破局之道

融云 RongCloud

软件测试的核心原则:确保质量的六大基石

测吧(北京)科技有限公司

测试

融云携高潜市场出海攻略亮相「2024 拉美中东北非出海峰会」

融云 RongCloud

Git fetch、pull 傻傻分不清楚?

极狐GitLab

git gitlab 代码托管 版本管理

Mint 101: 全面解读 Mint Blockchain 生态和参与指南

NFT Research

blockchain NFT\ 空投

技术解读:华为云如何携手昇腾、鸿蒙等根生态,助力开发者技术创新

华为云开发者联盟

华为云 鲲鹏计算 大模型 昇腾

软件测试的对象:从单元到系统,全方位覆盖的测试层级

测吧(北京)科技有限公司

测试

缺陷处理流程的最佳实践

测吧(北京)科技有限公司

测试

联想ThinkPad与英特尔携手亮相2024抖音创作者大会,加速生成式AI创作

科技范儿

哈银消费金融彰显责任担当:深化消保政策,稳健前行铸就新辉煌

极客天地

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