Hồi mới vào nghề làm Backend, mình từng nghĩ Apache là vua không thể đả bại. Cứ nghe mọi người bảo "Apache là tiêu chuẩn", là mình cài ngay, cấu hình file httpd.conf cho tới khi đau đầu, không hiểu tại sao server cứ bị sập mỗi khi có traffic cao một chút.
Rồi một ngày, sếp gọi vào và bảo: "Cái site bán hàng chạy ì ạch quá, khách than phiền loading mất 5 giây". Mình bắt đầu debug và mới vỡ lẽ ra là do mình đang dùng Apache chạy mô hình truyền thống, xử lý mỗi request bằng một process riêng biệt. Khi có hàng ngàn người cùng click vào lúc sale off, server như một ông lão đang cố vác cả dãy núi lên vai, đuối sức ngay.
Lúc đó, một anh DevOps trong team đã giới thiệu mình với Nginx. Anh ấy nói: "Cậu thử dùng nó làm reverse proxy và load balancing xem sao". Nghe cái tên nghe thật kêu, nhưng khi đọc tài liệu và chạy thử, mình thấy nó "khác biệt". Nginx dùng mô hình event-driven, không tạo process mới cho mỗi request, nên nhẹ tênh. Nó đứng ra làm cái cổng, đón tất cả traffic, rồi phân phối đều vào các server backend (chạy bằng Node.js hoặc Python) một cách thần tốc.
Mình nhớ rõ cảm giác lần đầu cấu hình file nginx.conf để setup load balancing. Thay vì một server đơn lẻ, mình chia làm 3 backend instance và Nginx đứng trước phân tải:
upstream backend_servers {
server 192.168.1.10;
server 192.168.1.11;
server 192.168.1.12;
}
server {
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
}
}
Khi deploy xong, monitor CPU xuống mức thấp hơn 50%, nhưng tốc độ xử lý tăng gấp 3 lần. Từ hôm đó, mình hiểu rằng không phải công nghệ nào mạnh hơn, mà là đúng chỗ. Apache vẫn hay cho các use case cần xử lý .htaccess phức tạp, nhưng trong vai trò gateway hay phân tải, Nginx thực sự là một "con quái vật" hiệu năng.
Đôi khi mình tự hỏi, nghề dev có lẽ cũng giống như việc chọn web server vậy. Đừng cố ép một công cụ làm việc nó không giỏi, hãy để nó làm điều nó thích nhất, còn mình thì học cách phối hợp chúng lại. Một kiến trúc tốt là sự kết hợp giữa Apache (xử lý static), Nginx (làm reverse proxy) và các server backend, mỗi đứa một việc, cùng nhau nâng đỡ cả hệ thống. Trải nghiệm này dạy mình bài học lớn nhất: Hiểu bản chất quan trọng hơn việc chạy theo trend.