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.
- Sử dụng .NET 8 Minimal API và Go Fiber framework, thực hiện hai bài test: một bài test đơn giản trả về dữ liệu JSON và một bài test phức tạp hơn bao gồm đọc file, upload lên S3 (MinIO), và ghi metadata vào cơ sở dữ liệu Postgres.
- Kết quả cho thấy Go (Fiber) thường xuyên vượt trội 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 .NET (Minimal API), đặc biệt là trong các bài test phức tạp. Độ trễ cũng thấp hơn đáng kể ở Go.
- Phương pháp thử nghiệm bao gồm sử dụng Kubernetes, Prometheus, Grafana, và một client tạo tải để đo lường hiệu năng. Kích thước image Docker cũng được so sánh.
Tóm tắt chi tiết:
Video chia thành hai phần chính:
Phần 1: So sánh hiệu năng framework thuần túy
- Giới thiệu về mục tiêu so sánh .NET 8 (Minimal API) và Go (Fiber), nhấn mạnh việc sử dụng các framework tối giản để đạt hiệu năng cao nhất. Người thuyết trình đề cập đến tuyên bố của Microsoft về hiệu năng của .NET vượt trội so với Go (khi sử dụng Gin framework), nhưng trong video này, họ sử dụng Fiber, một framework Go nhanh.
- Mô tả môi trường thử nghiệm: cụm Kubernetes đa node, sử dụng Prometheus, Grafana, cAdvisor và kube-state-metrics để giám sát và thu thập dữ liệu. Client bên ngoài được dùng để tạo tải và đo độ trễ.
- Thử nghiệm tăng dần số lượng client từ 10 đến hơn 1200 request/giây. Kết quả cho thấy Go luôn có độ trễ thấp hơn và sử dụng ít CPU hơn .NET. .NET bắt đầu gặp lỗi và độ trễ tăng đột biến ở khoảng 1300 request/giây, trong khi Go vẫn hoạt động ổn định ở mức cao hơn. Go cũng sử dụng ít bộ nhớ hơn đáng kể.
- Người thuyết trình trình bày các biểu đồ về sử dụng CPU, bộ nhớ, số lượng request/giây và độ trễ tổng thể trong suốt quá trình thử nghiệm.
Phần 2: So sánh hiệu năng trong kịch bản thực tế (đọc file, upload S3, ghi database)
- Thử nghiệm bao gồm đọc một file ảnh từ hệ thống file cục bộ, upload lên MinIO (S3-compatible), và ghi metadata vào cơ sở dữ liệu Postgres. Tất cả đều được triển khai trên Kubernetes.
- Quá trình thử nghiệm tương tự phần 1, tăng dần số lượng client. Go tiếp tục thể hiện hiệu năng vượt trội, sử dụng ít CPU và bộ nhớ hơn, độ trễ thấp hơn cả khi upload file và ghi database. .NET tăng kích thước connection pool trong khi Go giữ ổn định.
- Người thuyết trình trình bày các biểu đồ về sử dụng CPU, bộ nhớ, độ trễ database, kích thước connection pool, độ trễ client, và độ trễ S3. Go xử lý được nhiều request hơn .NET.
- Người thuyết trình đề cập đến việc sử dụng image Docker distroless để giảm kích thước image, Go có image nhỏ hơn .NET đáng kể, dẫn đến thời gian khởi động nhanh hơn. Thời gian khởi động được đo bằng kube-state-metrics.
Tổng kết: Video cung cấp một bài so sánh chi tiết và toàn diện về hiệu năng của .NET và Go trong các kịch bản khác nhau, với kết quả cho thấy Go (Fiber) thường có hiệu năng tốt hơn .NET (Minimal API) về độ trễ, thông lượng và sử dụng tài nguyên. Phương pháp thử nghiệm được mô tả rõ ràng, giúp người xem hiểu rõ cách thức thu thập và phân tích dữ liệu.