Nginx vs Caddy Performance

Tóm tắt ngắn:
- Video so sánh hiệu năng của hai máy chủ web và proxy ngược: Nginx (viết bằng C) và Caddy (viết bằng Go).
- Điểm mấu chốt là so sánh hiệu suất của cả hai trong việc phục vụ website tĩnh qua HTTPS và hoạt động như proxy ngược/cân bằng tải. Các chỉ số được đo bao gồm độ trễ (latency), lưu lượng (throughput), sử dụng CPU/RAM, tỷ lệ lỗi và khả năng hoạt động.
- Ứng dụng: lựa chọn máy chủ web phù hợp dựa trên nhu cầu hiệu năng và độ phức tạp cấu hình. Nginx cho hiệu năng cao hơn, Caddy đơn giản hơn, dễ cấu hình.
- Phương pháp: Sử dụng AWS EC2, EKS, Terraform để thiết lập môi trường thử nghiệm, tạo tải bằng Kubernetes, và đo đạc các chỉ số hiệu năng trong nhiều giờ.
Tóm tắt chi tiết:
Video được chia thành các phần chính sau:
1. Giới thiệu: Video giới thiệu về việc so sánh hiệu năng giữa Nginx và Caddy, hai máy chủ web và proxy ngược phổ biến. Mục tiêu là đánh giá hiệu suất của chúng trong hai bài test: phục vụ website tĩnh và hoạt động như proxy ngược/cân bằng tải. Các chỉ số đo lường bao gồm độ trễ (latency - p99 percentile), lưu lượng (throughput), sử dụng CPU và bộ nhớ, và tỷ lệ lỗi. Môi trường thử nghiệm được xây dựng trên AWS sử dụng các instance EC2 và EKS, với chi phí khoảng 20-50 đô la mỗi bài test.
2. Thiết kế bài test: Bài test đầu tiên sử dụng Next.js để tạo một website tĩnh, sau đó được phục vụ bởi Nginx và Caddy với HTTPS và nén dữ liệu. Bài test thứ hai sử dụng cả hai máy chủ như proxy ngược và cân bằng tải cho hai ứng dụng phía sau. Terraform được sử dụng để tự động hóa việc tạo lập môi trường VPC và các thành phần mạng. Tải được tạo ra bởi các pod Kubernetes trên EKS.
3. Cấu hình: Nginx sử dụng các thiết lập mặc định được tối ưu hóa (nhờ pull request), bao gồm multi_accept
và tăng giới hạn số file mở. Caddy sử dụng các thiết lập mặc định "production". Mã nguồn được công khai trên GitHub.
4. Bài test 1 - Máy chủ web: Nginx cho thấy độ trễ thấp hơn và lưu lượng xử lý cao hơn đáng kể so với Caddy. Caddy đạt đến giới hạn CPU (50%) ở khoảng 4000 request/giây và độ trễ bắt đầu tăng. Nginx đạt gần 22000 request/giây, ổn định hơn so với bài test trước với Apache. Caddy có hiện tượng tăng đột biến độ trễ, có thể do garbage collection của Go. Nginx có lưu lượng mạng cao hơn.
5. Bài test 2 - Proxy ngược: Ban đầu Caddy có hiệu năng tốt hơn, nhưng nhanh chóng bị tụt lại phía sau Nginx. Nginx đạt gần 27000 request/giây, cao hơn nhiều so với bài test với Apache. Ứng dụng phía sau Nginx chịu tải cao hơn đáng kể so với ứng dụng phía sau Caddy (điểm đáng chú ý cần tìm hiểu thêm). Caddy lại gặp hiện tượng tăng đột biến độ trễ, khả năng hoạt động giảm xuống đáng kể.
6. Kết luận: Caddy phù hợp cho người mới bắt đầu hoặc các dự án nhỏ. Nginx có hiệu năng cao hơn, tiết kiệm chi phí hơn, đặc biệt là khi hoạt động như proxy ngược/cân bằng tải. Tác giả khuyến nghị sử dụng Nginx nếu cần hiệu năng cao và khả năng xử lý lưu lượng lớn.