写点什么

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

评论

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

专业解读:JNPF低代码开发平台怎样为企业财务管理创新转型提供数字化赋能

不在线第一只蜗牛

低代码

Kyutai开源端侧模型Helium -1 preview;FoloToy内测「超级智能体」,支持联网查询和语音调整音量语速

RTE开发者社区

PIRF 421:Measurements – Embracing the Imperial System

Echo!!!

English

Easysearch Rollup 使用指南

极限实验室

Rollup Performance easysearch

智能网联汽车的数据脱敏

芯盾时代

车联网 物联网 数据安全 智能汽车

AI智能体在自动化测试中的应用

测试人

反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理

京东科技开发者

我在腾讯用AI写代码

CodeBuddy

SimCorp最新买方调查显示,人工智能必须更好地融入投资流程

财见

从0到1:基于SSM的陪诊小程序开发笔记(一)

CC同学

【GreatSQL优化器-11】finalize_table_conditions

GreatSQL

深入了解淘宝天猫API接口:商品详情与关键词搜索商品列表的实用指南

代码忍者

淘宝API接口

火山引擎上线鸿蒙原生智能美化解决方案 轻松提升图形视频美化体验

HarmonyOS开发者

火山引擎

地平线Vision Mamba:超越ViT,最具潜力的下一代通用视觉主干网络

地平线开发者

自动驾驶 算法 地平线征程6

基于Springboot: 宠物小程序开发笔记(上)

CC同学

音乐 NFT 系统的智能合约开发

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

智能合约 软件外包公司 音乐NFT

如何让敏捷落地?谈谈敏捷工具在团队中的应用实践

爱吃鱼的小雨

敏捷开发 敏捷项目管理 敏捷工具 scrum工具 敏捷研发工具

工作流程图怎么制作?10个流程图模板案例盘点!

职场工具箱

流程图 画图软件 绘图 在线白板 流程图绘制工具

用DevEco Studio模拟器这些能力 没真机也能高效调测鸿蒙原生应用

HarmonyOS开发者

《CPython Internals》阅读笔记:p151-p151

codists

CPython Internals

普通人如何赶上AI大模型浪潮

老张

人工智能 AI 自由职业 第二曲线 大模型

音乐NFT系统开发的技术难点

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

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

音视频编解码的性能优化

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

软件外包公司 音视频编码 音视频解码

音视频编解码开发的技术难点

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

音视频开发 音视频引擎 软件外包公司

加入我们|申请成为亚马逊云科技 Community Builder,共建云端社区!

亚马逊云科技 (Amazon Web Services)

面向法律场景的大模型RAG检索增强解决方案

阿里云大数据AI技术

人工智能 阿里云 LLM rag PAI

2025-01-15:执行操作可获得的最大总奖励 Ⅰ。用go语言,给定一个整数数组 rewardValues,其中包含 n 个代表奖励值的数字。 你开始时的总奖励 x 为 0,并且所有下标都是未标记状

福大大架构师每日一题

福大大架构师每日一题

图片秒变短视频!阿里妈妈“淘宝星辰·图生视频”向商家开放使用

新消费日报

如何在 Windows 上安装 Python 环境的详细指南

克莱因瓶

MIAOYUN荣获“新质榜样·2024信创力量最佳技术解决方案奖”

MIAOYUN

云计算 云原生 解决方案 信创 超融合

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