大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

评论

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

ONES Talk | 我们为什么选择最难走的软件之路

万事ONES

SaaS ONES

如何使用 Kubernetes 监测定位慢调用

阿里巴巴云原生

阿里云 Kubernetes 云原生 监控工具

30 K8S之Deployment控制器

穿过生命散发芬芳

k8s 11月日更

文章目录 [Index]

dclar

大数据 技术 管理 操作系统 中间件

Taro 3.4 beta 发布: 支持 Preact 为应用开辟更多体积空间

凹凸实验室

taro 大前端 React HarmonyOS

“元宇宙”来了 城市会消亡吗?

CECBC

元宇宙所带来价值共识的历史回归

CECBC

区块链技术及其军事应用

CECBC

雪花算法对System.currentTimeMillis()优化真的有用么?

秦怀杂货店

分布式 算法 雪花算法

TypeScript 之基础入门

冴羽

JavaScript typescript html5 翻译 大前端

Deco 智能代码技术揭秘:设计稿智能生成代码

凹凸实验室

机器学习 AI 大前端 低代码

Zillow“炒房”失败,算法神话破灭了吗?

脑极体

[Pulsar] 按照KeyHashRange读取消息

Zike Yang

Apache Pulsar 11月日更

创新模式驱动生产力提升,融云社交场景化 SDK 探索

融云 RongCloud

直播 sdk 语聊房 场景化

APISIX-Datadog 插件发布,助力用户提高系统的可观测性

API7.ai 技术团队

云原生 可观测性 API网关 APISIX Datadog

一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境

刘悦的技术博客

Python ubuntu Mac Python3 win11

不要累死自己,也不要卷死别人。

石云升

内卷 职场经验 11月日更

【架构实战营】模块五

衣谷

架构实战营

.NET 中缓存的实现

喵叔

11月日更

论渗透信息收集的重要性

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

恒源云(GPUSHARE)_卷积神经网络的工作原理

恒源云

深度学习

在线文本字符串批量替换工具

入门小站

工具

大湾区|Serverless 线下活动两连发

阿里巴巴云原生

阿里云 Serverless 云原生 线下活动 大湾区

hw5-微博评论高性能高可用

WWH

架构实战营

读《区块链技术及应用第二版》华为区块链发展思路、双引擎战略及华为区块链特点和使用有感

孙叫兽

区块链 华为链 华为区块链服务

【DevKit黑科技揭秘】│深入浅出DevKit性能调优,让系统“瓶颈”无处遁形

Geek_32c4d0

技术管理哲学随笔:如果空降,你会怎么做

dclar

CTO 技术管理 管理经

移动支付与支付安全SDL

明亮安全观

网络安全 信息安全 数据安全 支付安全 交易安全

大厂算法面试之leetcode精讲13.单调栈

全栈潇晨

LeetCode 算法面试

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