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