User vs Request: Tại sao chỉ vài người online đã làm sập Web?
Sự nhầm lẫn giữa “Số lượng người truy cập (User Online)” và “Số lượng yêu cầu (Request)” là một trong những hiểu lầm phổ biến nhất khi quản trị website. Nhiều khách hàng thường thắc mắc: “Tại sao web chỉ có 10 người online mà CPU server đã nhảy lên 100%?”
Dưới đây là bài phân tích chi tiết để làm rõ sự khác biệt này và lý do tại sao chỉ cần một vài user cũng có thể “đánh sập” một server nếu không được tối ưu.
I. Định nghĩa cơ bản: User vs Request

User Online (Người dùng trực tuyến)
Đây là một khách thể duy nhất (Unique Visitor) đang mở website của bạn trên trình duyệt.
- Đặc điểm: User thường có những khoảng nghỉ (ngồi đọc bài viết, xem ảnh) mà không tương tác với server.
- Đo lường: Thường dựa trên Sessions (Phiên làm việc) trong một khoảng thời gian (ví dụ: Google Analytics tính 30 phút).
Request (Yêu cầu)
Đây là một hành động kỹ thuật mà trình duyệt gửi đến server để lấy dữ liệu.
- Đặc điểm: Một user không chỉ tạo ra 1 request. Để hiển thị một trang web hoàn chỉnh, trình duyệt phải gửi hàng chục, thậm chí hàng trăm request.
- Đo lường: Tính bằng số lượng lệnh gọi đến file HTML, CSS, JS, hình ảnh, và các truy vấn Database.
II. Tại sao 1 User lại tạo ra nhiều Request?

Hãy tưởng tượng trang web của bạn như một bàn tiệc. Một “User” là một khách hàng, nhưng để phục vụ khách hàng đó, người bồi bàn (Server) phải thực hiện rất nhiều “Request”:
- Lấy chén (1 request)
- Lấy đũa (1 request)
- Mang món khai vị (1 request)
- Mang món chính (1 request)
- Rót nước (1 request)
Thực tế trên website: Khi một user nhấn vào trang chủ, trình duyệt sẽ gửi các request sau:
- 1 request lấy file index.php (HTML).
- 10 – 20 request lấy các file CSS/JS để làm đẹp giao diện.
- 20 – 50 request lấy hình ảnh, icon, font chữ.
- Các request ngầm (AJAX) để load thông báo, giỏ hàng, hoặc kiểm tra trạng thái đăng nhập.
Tổng cộng: 1 User Online có thể tạo ra từ 50 đến 100 requests chỉ trong vài giây đầu tiên tải trang.
III. Bản chất của sự quá tải: “Sức nặng” của Request
Không phải mọi request đều giống nhau. Có những request rất “nhẹ” nhưng có những request cực kỳ “nặng”.

Ví dụ về trường hợp 1 User làm quá tải tài nguyên:
Giả sử bạn có một website bán hàng và User thực hiện hành động “Tìm kiếm sản phẩm” :
- User gõ từ khóa và nhấn Enter (1 Request).
- Server phải chạy PHP để xử lý từ khóa.
- PHP thực hiện một câu lệnh SQL phức tạp để tìm trong 100.000 sản phẩm.
- Nếu Database không được đánh Index (tối ưu), CPU sẽ phải quét toàn bộ dữ liệu.
- Kết quả: Chỉ 1 request tìm kiếm này có thể chiếm dụng 50% CPU trong vòng 2-3 giây. Nếu user đó nhấn F5 (tải lại) liên tục, họ có thể tự mình làm treo server.
IV. Một số ví dụ thực tế khác
Ví dụ A: “Cơn mưa” Request từ Plugin/Theme
Nhiều website WordPress cài các plugin như: Kiểm tra link hỏng, quét bảo mật, hoặc hiển thị số lượt xem thời gian thực. Các plugin này liên tục gửi request về server mỗi vài giây (Heartbeat API).
- Hậu quả: 5 User online nhưng tạo ra tần suất request liên tục như 500 người.
Ví dụ B: Bot và Crawler
Nhiều khi bạn thấy chỉ có 1 user online (là chính bạn), nhưng thực tế có hàng chục con Bot (Googlebot, Bingbot, hoặc bot spam) đang “cào” dữ liệu.
- Hậu quả: Bot không hiện trong báo cáo “User Online” của bạn nhưng nó gửi hàng nghìn request mỗi phút.
Ví dụ C: Đính kèm file nặng
Nếu trang web có 1 file ảnh dung lượng 10MB chưa nén.
- Hậu quả: Khi 1 user truy cập, server phải tốn rất nhiều băng thông và tài nguyên I/O (đọc ghi ổ cứng) để đẩy file đó đi. Nếu kết nối mạng của user chậm, tiến trình (process) đó sẽ bị treo lại trên server, chiếm dụng RAM cho đến khi gửi xong.
V. Lời kết và Giải pháp
Để giải thích cho người dùng, hãy dùng con số cụ thể:
“Số lượng User Online giống như số người ngồi trong quán. Còn Request giống như số món ăn họ gọi. Một người gọi 100 món ăn cùng lúc chắc chắn sẽ làm đầu bếp (Server) kiệt sức hơn là 10 người mỗi người chỉ uống 1 ly nước.”
Cách khắc phục để giảm tải:
- Cài đặt Cache (LTS, Redis, WP Rocket): Biến các request “nặng” (PHP/SQL) thành các request “nhẹ” (HTML tĩnh).
- Sử dụng CDN (Cloudflare): Gánh bớt các request về hình ảnh, CSS, JS cho server gốc.
- Tối ưu Code & Database: Đảm bảo các truy vấn không bị lặp lại vô lý.
- Giới hạn Rate Limit: Ngăn chặn một user hoặc bot gửi quá nhiều request trong một khoảng thời gian ngắn.
Đừng chỉ nhìn vào con số “User Online” để đánh giá sức mạnh của Server, mà thay vào đó bạn cần phải kiểm tra access_log thực tế để xem các request thực mà các User gửi đến Server. Hãy tập trung tối ưu hóa từng Request (nén ảnh, dùng Cache, chặn Bot) để dù 1 hay 1.000 người truy cập, hệ thống của bạn vẫn luôn “khỏe mạnh” và mượt mà.