5 Web Framework đối mặt với 1 tỷ request – Kết quả bất ngờ

Chúng tôi thực hiện một bài kiểm tra quy mô lớn: gửi 1 tỷ request đến 5 web framework thông dụng để kiểm chứng khả năng xử lý tải nặng của từng nền tảng.


Tin tức công nghệ, request, framework

 

Thử nghiệm này không đơn thuần là benchmark theo kiểu đo số liệu khô khan. Mọi thứ được thiết lập như môi trường production thực thụ: đầy đủ giám sát (observability), kiểm tra hiệu suất bằng wrk2k6, đồng thời tăng dần tải để đánh giá framework trong tình huống thực tế khi hệ thống chịu áp lực lớn.

 

Mặc dù các con số như RPS hay mức sử dụng bộ nhớ giúp đánh giá hiệu năng, nhưng chúng không đủ để kết luận nên dùng framework nào. Hệ sinh thái, cộng đồng, tốc độ phát triển, khả năng bảo trì và mức độ phù hợp với đội ngũ kỹ thuật cũng là yếu tố quan trọng không kém.

 

Vì vậy, kết quả dưới đây chỉ nên xem là nguồn tham khảo, không phải tiêu chí duy nhất trong việc lựa chọn công nghệ.

 

1. Các Framework được đưa vào thử nghiệm

 

5 framework được lựa chọn đều đang rất phổ biến và đã được sử dụng rộng rãi trong các hệ thống sản xuất năm 2025:

 

  • Go (Gin) – Gọn nhẹ, compile nhanh, hiệu suất cao

 

  • Rust (Actix-Web) – An toàn bộ nhớ, kiểm soát tốt tài nguyên thấp tầng, thường xuyên đứng đầu các bảng xếp hạng tốc độ

 

  • Node.js (Fastify) – Nền tảng async, tối ưu cho workload phi đồng bộ, thân thiện với JavaScript

 

  • Python (FastAPI) – Cú pháp dễ dùng, tích hợp async tốt

 

  • Java (Spring Boot) – Giải pháp quen thuộc cho các ứng dụng enterprise, mạnh mẽ nhưng tốn tài nguyên

 

Mỗi framework đều được kiểm tra với một endpoint REST đơn giản bao gồm: phân tích JSON, truy cập CSDL PostgreSQL và trả về JSON phản hồi.

 

2. Kịch bản kiểm thử

 

Hạ tầng sử dụng:

 

  • Máy ảo 4 vCPU, 16GB RAM trên GCP

 

  • Mỗi ứng dụng chạy trong container Docker riêng biệt

 

  • PostgreSQL dùng connection pooling

 

  • Sử dụng wrk2 để tạo tải ổn định theo tần suất

 

  • Tăng tải từ 100 → 100.000 requests/giây, tổng cộng 1 tỷ request

 

Các chỉ số được ghi nhận:

 

  • Số requests mỗi giây (RPS)

 

  • Độ trễ ở mức 95% và 99%

 

  • Dung lượng bộ nhớ sử dụng (RSS)

 

  • Mức sử dụng CPU

 

  • Tỷ lệ lỗi dưới áp lực

 

  • Khả năng duy trì kết nối và phục hồi

 

3. Kết quả chi tiết từng framework

 

3.1 Go (Gin)

 

Gin vận hành ổn định, đạt hơn 100.000 RPS với độ trễ luôn dưới 10ms. Bộ thu gom rác (GC) hoạt động mượt mà, không làm tăng độ trễ rõ rệt. RAM sử dụng chỉ khoảng 190MB.

 

  • Ưu điểm: Sử dụng bộ nhớ thấp, JSON xử lý cực nhanh, hiệu năng vững vàng dưới áp lực cao

 

  • Nhược điểm: Hệ sinh thái chưa phong phú bằng Java/Python trong một số mảng chuyên biệt, nhưng đủ tốt cho backend hiện đại

 

3.2 Rust (Actix-Web)

 

Actix vượt trội nhất về mặt tốc độ. Ở mức 99th percentile, framework này có độ trễ thấp nhất trong tất cả. Tuy nhiên, việc triển khai đòi hỏi nhiều cấu hình và viết code tương đối phức tạp.

 

  • Ưu điểm: Hiệu năng tốt nhất ở tải cao, gần như không có lỗi khi chạy concurrency lớn

 

  • Nhược điểm: Độ phức tạp cao, học Rust và làm quen với hệ sinh thái mất thời gian hơn Go

 

3.3 Node.js (Fastify)

 

Fastify cho throughput khá tốt (~60.000 RPS), làm việc hiệu quả với async task. Nhưng lượng RAM sử dụng cao (khoảng 650MB) và GC đôi khi tạo ra các spike latency nhẹ.

 

  • Ưu điểm: Dễ mở rộng, cộng đồng mạnh, hỗ trợ async tốt

 

  • Nhược điểm: Dễ gặp hiện tượng tăng độ trễ bất chợt khi GC hoạt động

 

3.4 Python (FastAPI)

 

FastAPI hoạt động ổn định ở tải thấp. Tuy nhiên, khi lên trên 10.000 requests đồng thời, CPU đạt giới hạn, RAM vượt 1.2GB, latency tăng mạnh.

 

  • Ưu điểm: Code dễ viết, dễ đọc, thân thiện với developer

 

  • Nhược điểm: Khả năng xử lý tải cao hạn chế, ngốn bộ nhớ

 

3.5 Java (Spring Boot)

 

Spring Boot cho hiệu suất ổn định, nhưng tiêu tốn tài nguyên. Idle đã dùng hơn 1GB RAM, cần tối ưu kỹ JVM. Sau khi cấu hình phù hợp, hệ thống vẫn giữ được 40.000 RPS mà không gặp lỗi.

 

  • Ưu điểm: Hệ sinh thái hoàn thiện, phù hợp với dự án enterprise lớn

 

  • Nhược điểm: Thời gian khởi động lâu, tiêu hao tài nguyên cao

 

4. Tổng hợp kết quả Benchmark

 

Framework RPS (95% thành công) Peak Memory (RSS) Độ trễ 99th Percentile
Go (Gin) 105.000 190MB 10ms
Rust (Actix) 110.000 250MB 7ms
Node.js (Fastify) 60.000 650MB 35ms
Java (Spring Boot) 40.000 1.4GB 50ms
Python (FastAPI) 8.000 1.2GB 150ms

 

5. Kết luận

 

Kết quả trên cho thấy rằng:

 

  • Rust và Go là lựa chọn tốt nhất nếu bạn đặt nặng hiệu năng và tối ưu tài nguyên.

 

  • Fastify (Node.js) phù hợp với các hệ thống JavaScript-based, nơi async là ưu tiên.

 

  • Spring Boot vẫn là lựa chọn tin cậy cho môi trường enterprise, dù cần tối ưu tốt.

 

  • FastAPI là lựa chọn thân thiện để phát triển nhanh, nhưng hạn chế khi cần xử lý tải lớn.

 

Dù benchmark là thông tin quan trọng, đừng quên rằng chọn framework vẫn cần cân nhắc đến đội ngũ, mục tiêu dự án và mức độ bảo trì lâu dài.

 HỖ TRỢ TRỰC TUYẾN