- Published on
NGINX xử lý hàng nghìn kết nối đồng thời như thế nào?
- Authors
- Name
- Bạch Đăng Tuấn
- Occupation
- Kỹ sư công nghệ thông tin
- Zalo: 0934.01.07.04
🔍 NGINX xử lý hàng nghìn kết nối đồng thời như thế nào?
NGINX nổi tiếng vì khả năng xử lý hàng nghìn đến hàng chục nghìn kết nối đồng thời mà không bị nghẽn. Đây là điểm khác biệt lớn so với các web server truyền thống như Apache.
📑 Mục Lục
- Vấn đề thực tế
- Mô hình kiến trúc xử lý của NGINX
- Chi tiết kỹ thuật: epoll, event loop
- Mô hình minh họa
- So sánh với mô hình thread-based
- Tổng kết
🧠 Bài toán thực tế
Giả sử bạn có:
- Một website thương mại điện tử
- Có 20.000 người dùng truy cập cùng lúc (mỗi người mở 2 tab)
→ Bạn có 40.000 kết nối đồng thời. Làm sao web server chịu được?
⚙️ Kiến trúc xử lý của NGINX
NGINX sử dụng kiến trúc:
- Event-driven (theo sự kiện)
- Asynchronous non-blocking
- Multi-process (không multi-thread)
🔧 Thành phần chính:
Thành phần | Vai trò |
---|---|
Master process | Quản lý worker, reload cấu hình |
Worker process | Xử lý request từ client |
Event module | Lắng nghe nhiều socket qua epoll/kqueue |
Non-blocking I/O | Không chờ dữ liệu hoàn thành mới xử lý request khác |
🔬 Chi tiết kỹ thuật: epoll, event loop
epoll
(Linux)
🧩 Cơ chế - Cho phép 1 worker process lắng nghe nhiều socket kết nối cùng lúc
- Khi có sự kiện (read/write), epoll mới thông báo
- Tránh tình trạng "1 thread cho 1 request" như mô hình cũ
🔁 Event loop
- Mỗi worker chạy 1 vòng lặp sự kiện (event loop)
- Liên tục kiểm tra:
- Có request mới không?
- Socket nào có dữ liệu đến?
- Trả về dữ liệu nào xong chưa?
📦 Mô hình minh họa
[Client 1]
[Client 2]
...
[Client N]
↓
[TCP Socket]
↓
┌────────────┐
│ NGINX │
│ Worker │
└────────────┘
↕ epoll
[Event Loop]
↕ Non-blocking I/O
↔ [App / Backend]
Một worker có thể xử lý hàng nghìn kết nối vì không bị chặn bởi I/O.
🔄 So sánh với mô hình thread-based (Apache)
Mô hình | Apache (thread) | NGINX (event loop) |
---|---|---|
1 request = 1 thread | ✅ Có | ❌ Không |
Tốn RAM | Cao nếu kết nối nhiều | Rất ít |
Blocking I/O | Có | Không |
Hiệu suất cao | Trung bình | ✅ Rất cao |
Dễ scale | Khó | ✅ Dễ |
✅ Tổng kết
Điểm mạnh của NGINX | Mô tả |
---|---|
Xử lý hàng nghìn kết nối bằng epoll | Không cần tạo thread mới |
Không blocking | Worker không bị "đứng hình" khi chờ dữ liệu |
Dễ cấu hình, hiệu năng cao | Phù hợp hệ thống lớn |
📚 Tài nguyên tham khảo
- https://nginx.org/en/docs/
- https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/
- https://vietstack.vn/kien-truc-nginx/
✅ NGINX không dùng nhiều RAM và CPU để phục vụ nhiều người dùng. Nó dùng thiết kế thông minh để làm việc hiệu quả – điều mà một lập trình viên backend/DevOps cần nắm vững!