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

传统的“一连接一线程”模型中,每个连接都可能占用一个线程。
一个请求 ↓ 一个线程/进程 ↓ 等待网络 I/O ↓ 处理请求 ↓ 返回
随着连接数增长,线程切换、栈内存和调度开销会迅速增加,系统资源也容易成为瓶颈。
Nginx采用事件驱动架构,并结合非阻塞 I/O处理连接。
工作进程无需为每个连接单独创建线程,而是通过事件通知机制,在连接可读、可写时再进行处理。
一个工作进程因此能够管理大量连接,减少线程创建与上下文切换带来的成本。
多进程架构

Master
│
┌───────────┼───────────┐
↓ ↓ ↓
Worker 1 Worker 2 Worker 3 ...
│ │ │
Event Event Event
Loop Loop Loop
Nginx通常采用多进程架构,主进程负责管理和维护工作进程,工作进程则实际处理连接和请求。
工作进程之间相对独立,一个进程发生故障时,通常不会直接导致整个服务停止。
在多核服务器上,可以通过合理设置工作进程数量,使其与可用 CPU 资源相匹配,减少进程竞争并提升并行处理能力。
同时,进程模型也避免了复杂的共享内存状态管理,使运行结构较为清晰。
但工作进程数量并非越多越好。数量过多可能增加调度与资源竞争,数量过少则无法充分利用 CPU。
实际配置需要结合 CPU 核数、请求类型、连接规模及压测结果调整,而不能仅凭经验套用固定值。
负载均衡技术

面对大量请求,单台应用服务器往往难以独立承担全部压力。
Nginx可以作为反向代理,将客户端请求分发到多个后端实例,并通过轮询、权重、IP 哈希等策略完成负载均衡。
这样既能扩展服务容量,也有助于避免流量集中在少数节点上。
Nginx性能优化

Nginx 可以使用:
sendfile on;
利用操作系统提供的 sendfile(),减少不必要的数据复制。
Nginx 官方文档明确说明,启用 sendfile 可以省去将文件先复制到 Buffer 的步骤,实现文件描述符之间的数据直接传输。
所以:
传统:
磁盘 → 用户态 → 内核态 → Socket → 网卡
sendfile:
磁盘 → 内核态 → Socket → 网卡
这意味着:
减少 CPU 消耗 + 减少内存拷贝 + 提高网络吞吐。
以上