Link to original video by Anton Putra
Python (FastAPI) vs Go (Golang) Performance Benchmark

Tóm tắt ngắn:
- Video so sánh hiệu năng giữa FastAPI (Python) và Go trong việc xây dựng API.
- Điểm mấu chốt là so sánh hiệu suất thông qua hai bài test: test đơn giản trả về dữ liệu cứng và test phức tạp hơn bao gồm ghi dữ liệu vào cơ sở dữ liệu quan hệ (PostgreSQL) và bộ đệm (Memcached). Các chỉ số đo lường bao gồm độ trễ (latency), yêu cầu mỗi giây (requests per second), sử dụng CPU, bộ nhớ, và khả năng mở rộng trên Kubernetes.
- Go thể hiện hiệu năng vượt trội so với FastAPI trong cả hai bài test, đặc biệt là ở khả năng xử lý số lượng lớn yêu cầu đồng thời. Video nhấn mạnh sự khác biệt đáng kể về hiệu suất và khả năng mở rộng giữa hai ngôn ngữ/framework.
- Phương pháp được sử dụng là benchmark thực tế trên môi trường Kubernetes, sử dụng các instance EC2 của AWS và các công cụ giám sát như Prometheus và Grafana.
Tóm tắt chi tiết:
Video chia thành hai phần chính, mỗi phần là một bài test so sánh hiệu năng FastAPI (Python) và Go:
Phần 1: Test đơn giản (Trả về dữ liệu cứng):
- Mục tiêu: So sánh hiệu năng cơ bản của FastAPI và Go khi xử lý các yêu cầu đơn giản không có logic kinh doanh phức tạp.
- Kết quả: Go thể hiện hiệu năng vượt trội, đạt khoảng 62.000 yêu cầu/giây, trong khi FastAPI chỉ đạt khoảng 13.000 yêu cầu/giây trước khi bị Kubernetes điều tiết do đạt mức sử dụng CPU tối đa. Độ trễ của Go cũng thấp hơn đáng kể. Người thuyết trình bày tỏ sự thất vọng vì hiệu năng của FastAPI thấp hơn mong đợi. Ông nhận xét: "hiệu suất API nhanh tương tự như jungo, có thể tốt hơn một chút nhưng không nhiều".
- Chỉ số đo lường: Yêu cầu/giây, độ trễ (P99), sử dụng CPU, khả năng mở rộng (tính khả dụng), sử dụng bộ nhớ, điều chỉnh CPU.
Phần 2: Test phức tạp (Ghi dữ liệu vào cơ sở dữ liệu và bộ đệm):
- Mục tiêu: So sánh hiệu năng khi xử lý yêu cầu phức tạp hơn, bao gồm tương tác với cơ sở dữ liệu PostgreSQL và bộ đệm Memcached.
- Kết quả: Go tiếp tục thể hiện hiệu năng vượt trội, xử lý nhiều yêu cầu hơn đáng kể so với FastAPI. FastAPI chỉ đạt khoảng 800 yêu cầu/giây, trong khi Go đạt tốc độ cao hơn nhiều (được đề cập đến 35.000 yêu cầu/giây nhưng bị giới hạn bởi số mô tả tệp). Go có độ trễ cơ sở dữ liệu và Memcached thấp hơn. Người thuyết trình điều chỉnh số lượng worker của FastAPI để cải thiện hiệu năng nhưng vẫn không thể sánh bằng Go.
- Chỉ số đo lường: Yêu cầu/giây, độ trễ (yêu cầu, cơ sở dữ liệu, Memcached), sử dụng CPU (ứng dụng, PostgreSQL, Memcached), sử dụng bộ nhớ, kích thước nhóm kết nối (PostgreSQL, Memcached).
- Người thuyết trình đề cập đến việc sử dụng Memcached thay vì Redis vì hiệu quả hơn và tiết kiệm chi phí. Ông cũng đề cập đến việc giới hạn nhóm kết nối để tối ưu hiệu năng. Việc ứng dụng Go bị lỗi ở cuối do giới hạn mô tả tệp trên hệ thống Linux cũng được đề cập.
Tổng kết: Video cho thấy sự khác biệt đáng kể về hiệu năng giữa Go và FastAPI, với Go thể hiện khả năng xử lý tải cao và độ trễ thấp hơn nhiều. Người thuyết trình khuyến khích người xem thử cải thiện FastAPI và gửi pull request nếu có thể. Tuy nhiên, ông cho rằng sự khác biệt hiệu năng có thể khó khắc phục hoàn toàn.