Blog chia sẻ về công nghệ ...
Published on

NGINX xử lý hàng nghìn kết nối đồng thời như thế nào?

Authors

🔍 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ờikhô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

  1. Vấn đề thực tế
  2. Mô hình kiến trúc xử lý của NGINX
  3. Chi tiết kỹ thuật: epoll, event loop
  4. Mô hình minh họa
  5. So sánh với mô hình thread-based
  6. 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ầnVai trò
Master processQuản lý worker, reload cấu hình
Worker processXử lý request từ client
Event moduleLắng nghe nhiều socket qua epoll/kqueue
Non-blocking I/OKhô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

🧩 Cơ chế epoll (Linux)

  • 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]
                       ┌────────────┐
NGINXWorker                       └────────────┘
                          ↕ 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ìnhApache (thread)NGINX (event loop)
1 request = 1 thread✅ Có❌ Không
Tốn RAMCao nếu kết nối nhiềuRất ít
Blocking I/OKhông
Hiệu suất caoTrung bình✅ Rất cao
Dễ scaleKhó✅ Dễ

✅ Tổng kết

Điểm mạnh của NGINXMô tả
Xử lý hàng nghìn kết nối bằng epollKhông cần tạo thread mới
Không blockingWorker không bị "đứng hình" khi chờ dữ liệu
Dễ cấu hình, hiệu năng caoPhù hợp hệ thống lớn

📚 Tài nguyên tham khảo


✅ 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!