高并发场景,Nginx如何扛住百万级并发?

Nginx是大厂必备技能,下面我就重点详解Nginx如何扛住百万级并发@mikechen

事件驱动模型

高并发场景,Nginx如何扛住百万级并发?-mikechen

传统的“一连接一线程”模型中,每个连接都可能占用一个线程。

一个请求
   ↓
一个线程/进程
   ↓
等待网络 I/O
   ↓
处理请求
   ↓
返回

随着连接数增长,线程切换、栈内存和调度开销会迅速增加,系统资源也容易成为瓶颈。

Nginx采用事件驱动架构,并结合非阻塞 I/O处理连接。

工作进程无需为每个连接单独创建线程,而是通过事件通知机制,在连接可读、可写时再进行处理。

一个工作进程因此能够管理大量连接,减少线程创建与上下文切换带来的成本。

 

多进程架构

高并发场景,Nginx如何扛住百万级并发?-mikechen

             Master
               │
   ┌───────────┼───────────┐
   ↓           ↓           ↓
Worker 1    Worker 2    Worker 3 ...
   │           │           │
 Event       Event       Event
 Loop        Loop        Loop

Nginx通常采用多进程架构,主进程负责管理和维护工作进程,工作进程则实际处理连接和请求。

工作进程之间相对独立,一个进程发生故障时,通常不会直接导致整个服务停止。

在多核服务器上,可以通过合理设置工作进程数量,使其与可用 CPU 资源相匹配,减少进程竞争并提升并行处理能力。

同时,进程模型也避免了复杂的共享内存状态管理,使运行结构较为清晰。

但工作进程数量并非越多越好。数量过多可能增加调度与资源竞争,数量过少则无法充分利用 CPU。

实际配置需要结合 CPU 核数、请求类型、连接规模及压测结果调整,而不能仅凭经验套用固定值。

 

负载均衡技术

高并发场景,Nginx如何扛住百万级并发?-mikechen

面对大量请求,单台应用服务器往往难以独立承担全部压力。

Nginx可以作为反向代理,将客户端请求分发到多个后端实例,并通过轮询、权重、IP 哈希等策略完成负载均衡。

这样既能扩展服务容量,也有助于避免流量集中在少数节点上。

 

Nginx性能优化

高并发场景,Nginx如何扛住百万级并发?-mikechen

Nginx 可以使用:

sendfile on;

利用操作系统提供的 sendfile(),减少不必要的数据复制。

Nginx 官方文档明确说明,启用 sendfile 可以省去将文件先复制到 Buffer 的步骤,实现文件描述符之间的数据直接传输。

所以:

传统:

磁盘 → 用户态 → 内核态 → Socket → 网卡

sendfile:

磁盘 → 内核态 → Socket → 网卡

这意味着:

减少 CPU 消耗 + 减少内存拷贝 + 提高网络吞吐。

以上

评论交流
    说说你的看法
❯