Link to original video by Anton Putra
.NET (C#) vs. Fiber (Go): Performance (Latency - Throughput - Saturation - Availability)

Tóm tắt ngắn:
- Video so sánh hiệu năng của .NET (C#) và Go (Fiber) trong xử lý yêu cầu HTTP, tập trung vào độ trễ (latency), thông lượng (throughput), điểm bão hòa và khả năng sẵn sàng.
- Các công nghệ được sử dụng bao gồm: .NET 8 Minimal API, Go với Fiber framework, Kubernetes, Prometheus, Grafana, MinIO (S3-compatible), Postgres. Video thực hiện hai bài test: một bài test đơn giản chỉ trả về dữ liệu cứng, và một bài test phức tạp hơn bao gồm đọc file, upload lên S3 và ghi metadata vào cơ sở dữ liệu.
- Kết quả cho thấy Go (Fiber) thường xuyên vượt trội hơn .NET (Minimal API) về hiệu năng, sử dụng ít tài nguyên hơn (CPU, bộ nhớ) và xử lý được nhiều request hơn trước khi gặp lỗi. Kích thước image của ứng dụng Go cũng nhỏ hơn đáng kể, dẫn đến thời gian khởi động nhanh hơn.
- Phương pháp chính là sử dụng Kubernetes để triển khai và giám sát ứng dụng, Prometheus và Grafana để thu thập và hiển thị số liệu hiệu năng, và một client để tạo tải.
Tóm tắt chi tiết:
Video được chia thành các phần chính sau:
Phần 1: Giới thiệu và phương pháp thử nghiệm:
- Video giới thiệu về việc so sánh hiệu năng giữa .NET (C# với .NET 8 Minimal API) và Go (với Fiber framework). Người thuyết trình nhấn mạnh mục tiêu là đo lường độ trễ, thông lượng, điểm bão hòa và khả năng sẵn sàng của cả hai.
- Phương pháp thử nghiệm bao gồm hai bài test:
- Test 1: Kiểm tra hiệu năng cơ bản của framework bằng cách trả về dữ liệu cứng (JSON).
- Test 2: Mô phỏng một trường hợp sử dụng thực tế: đọc file ảnh, upload lên MinIO (thay thế cho S3), và ghi metadata vào Postgres.
- Môi trường thử nghiệm sử dụng Kubernetes, Prometheus, Grafana, và cAdvisor để giám sát và thu thập dữ liệu. Mã nguồn được công khai trên GitHub.
Phần 2: So sánh kích thước image và thời gian khởi động:
- Video so sánh kích thước image Docker của hai ứng dụng. Ứng dụng Go có kích thước nhỏ hơn nhiều so với ứng dụng .NET (khoảng hơn gấp đôi). Điều này được lý giải là do sử dụng image distroless.
- Thời gian khởi động được đo lường, cho thấy ứng dụng Go khởi động nhanh hơn do kích thước image nhỏ hơn. Tuy nhiên, người thuyết trình lưu ý rằng tốc độ mạng ảnh hưởng đến thời gian pull image.
Phần 3: Test 1: So sánh hiệu năng framework:
- Test 1 được thực hiện bằng cách tăng dần số lượng client gửi request đến hai ứng dụng.
- Kết quả cho thấy Go (Fiber) có hiệu năng tốt hơn đáng kể so với .NET (Minimal API) ở mọi mức tải. Go sử dụng ít CPU và bộ nhớ hơn, và xử lý được nhiều request hơn trước khi gặp lỗi. Độ trễ của Go cũng thấp hơn.
Phần 4: Test 2: So sánh hiệu năng với trường hợp sử dụng thực tế:
- Test 2 mô phỏng việc upload ảnh lên S3 (MinIO) và ghi metadata vào Postgres.
- Kết quả cho thấy Go tiếp tục thể hiện hiệu năng tốt hơn, sử dụng ít tài nguyên hơn và có độ trễ thấp hơn, đặc biệt là ở mức tải cao. .NET có xu hướng tăng kích thước connection pool trong khi Go giữ ổn định.
Phần 5: Kết luận:
- Video kết luận rằng Go (Fiber) có hiệu năng tốt hơn .NET (Minimal API) trong cả hai bài test. Go sử dụng ít tài nguyên hơn, xử lý được nhiều request hơn và có độ trễ thấp hơn.
- Người thuyết trình khuyến khích người xem đóng góp ý kiến về các ngôn ngữ hoặc dự án mã nguồn mở khác nên được so sánh trong các video tiếp theo.
Không có trích dẫn nào đáng chú ý ngoài việc người thuyết trình đề cập đến tuyên bố của Microsoft về hiệu năng của .NET so với Go (sử dụng Gin framework). Tuy nhiên, video này sử dụng Fiber cho Go để so sánh công bằng hơn.