Quay lại danh sách
Tin tức công nghệ

Tối ưu hóa Node.js REST API đạt mốc 80k RPS trên VPS 1 vCPU bằng cách chuyển dịch sang Bun và ElysiaJS

30 tháng 5, 2026

Giới thiệu: Thách thức tối ưu hóa hiệu năng với tài nguyên giới hạn

Trong kỷ nguyên điện toán đám mây, việc tối ưu hóa chi phí cơ sở hạ tầng (infrastructure cost) trong khi vẫn đảm bảo trải nghiệm người dùng mượt mà là một bài toán hóc búa đối với mọi doanh nghiệp. Thông thường, khi một hệ thống REST API đối mặt với lượng truy cập tăng đột biến, giải pháp đầu tiên được nghĩ đến là nâng cấp phần cứng (Vertical Scaling) hoặc mở rộng hàng ngang (Horizontal Scaling). Tuy nhiên, cả hai phương án này đều làm tăng chi phí vận hành một cách chóng mặt.

Bài viết này sẽ chia sẻ câu chuyện thực tế từ đội ngũ kỹ sư của chúng tôi khi đối mặt với bài toán: Làm thế nào để một ứng dụng REST API viết bằng Node.js chạy trên VPS cấu hình tối thiểu (1 vCPU, 2GB RAM) có thể chịu tải lên đến 80,000 Requests Per Second (RPS)? Câu trả lời không nằm ở việc tối ưu code cũ, mà nằm ở một quyết định táo bạo: Chuyển dịch toàn bộ hệ sinh thái sang Bun và ElysiaJS.

---

1. Điểm nghẽn kinh điển của Node.js và Express

Node.js đã là vị vua không ngai trong thế giới kiến trúc hướng sự kiện (event-driven) suốt hơn một thập kỷ. Kết hợp với Express, nó tạo ra một cặp đôi hoàn hảo cho việc phát triển nhanh (rapid development). Thế nhưng, khi chạm ngưỡng tải cực đại, cấu trúc này bắt đầu bộc lộ những hạn chế cố hữu:

  • V8 Engine overhead: Mặc dù JavaScript V8 vô cùng mạnh mẽ, nhưng việc khởi động và quản lý bộ nhớ của Node.js tiêu tốn lượng tài nguyên đáng kể trên các dòng chip đơn nhân (1 vCPU).
  • Express Middleware Chain: Cơ chế xử lý request tuần tự qua các middleware của Express tạo ra một lượng lớn garbage collection (GC), gây hiện tượng nghẽn cổ chai (bottleneck) khi số lượng request đồng thời tăng cao.
  • Sự thiếu hụt của các tính năng tối ưu hiện đại: Express đã khá cũ kỹ và không được thiết kế để tận dụng các tập lệnh CPU mới nhất hoặc cơ chế tối ưu hóa I/O ở tầng kernel một cách triệt để.

Kết quả đo lường thực tế: Trên cấu hình VPS 1 vCPU, framework Express cao nhất chỉ đạt ngưỡng 12,000 đến 15,000 RPS trước khi hệ thống rơi vào trạng thái quá tải (High CPU & RAM usage) và bắt đầu trả về lỗi 502/504.

---

2. Bun và ElysiaJS: Cặp bài trùng thay đổi cuộc chơi

Trước tình hình đó, chúng tôi quyết định thử nghiệm Bun – một runtime JavaScript toàn diện (all-in-one) được viết bằng ngôn ngữ Zig, và ElysiaJS – một framework Web được tối ưu hóa đặc biệt cho Bun. Kết quả mang lại thực sự vượt ngoài mong đợi.

Tại sao Bun lại nhanh đến thế?

Không giống như Node.js sử dụng V8, Bun sử dụng JavaScriptCore (JSC) – engine được phát triển bởi Apple cho trình duyệt Safari. JSC có thời gian khởi động nhanh hơn đáng kể và quản lý bộ nhớ hiệu quả hơn trong các tác vụ ngắn hạn (short-lived tasks). Thêm vào đó, việc viết bằng ngôn ngữ hệ thống Zig cho phép Bun tối ưu hóa bộ nhớ ở mức độ hạ tầng, bỏ qua các lớp bọc (wrapper) cồng kềnh.

ElysiaJS – Sức mạnh của Static Code Analysis

ElysiaJS không chỉ là một framework nhanh nhờ chạy trên Bun, nó nhanh nhờ kiến trúc thông minh:

  • Compile-time optimization: ElysiaJS phân tích các route và schema của bạn ngay khi khởi động để biên dịch thành các hàm JavaScript tối ưu nhất, loại bỏ việc tính toán lặp đi lặp lại khi có request đến.
  • Tích hợp chặt chẽ với TypeBox: Việc kiểm tra dữ liệu đầu vào (Validation) được thực hiện với tốc độ ánh sáng, nhanh hơn gấp nhiều lần so với các thư viện phổ biến như Joi hay Zod trên Node.js.
---

3. Chiến lược hiện thực hóa cột mốc 80,000 RPS

Để đạt được con số 80k RPS trên một máy chủ đơn nhân duy nhất, việc thay đổi framework mới chỉ là điều kiện cần. Điều kiện đủ nằm ở cách chúng tôi cấu hình và tối ưu hóa toàn diện hệ thống theo quy trình nghiêm ngặt sau:

Bước 1: Tối ưu hóa hệ điều hành Linux (Kernel Tuning)

Mặc định, các hệ điều hành như Ubuntu Server không được cấu hình để xử lý hàng chục nghìn kết nối đồng thời trên mỗi giây. Chúng tôi đã tinh chỉnh file /etc/sysctl.conf với các thông số sau:

  1. Tăng giới hạn file mở tối đa (Max Open Files): fs.file-max = 2097152
  2. Tối ưu hóa dải port và cơ chế tái sử dụng kết nối TCP: net.ipv4.tcp_tw_reuse = 1
  3. Tăng bộ đệm nhận/gửi dữ liệu để tránh nghẽn hàng đợi mạng.

Bước 2: Triển khai Clean Code với ElysiaJS

Chúng tôi tiến hành chuyển đổi mã nguồn từ Express sang ElysiaJS. Cấu trúc route được thiết kế tối giản, tận dụng tối đa tính năng Strict Validation của Elysia để lọc dữ liệu rác ngay từ tầng gateway, giảm tải cho tầng xử lý logic bên trong.

Bước 3: Sử dụng kết nối Connection Pooling tối đa

Mọi kết nối đến Database (PostgreSQL) và Cache (Redis) đều được cấu hình dưới dạng Connection Pool nghiêm ngặt, giới hạn số lượng kết nối phù hợp với khả năng xử lý của 1 vCPU để tránh tình trạng context-switching (chuyển đổi ngữ cảnh) quá tải của CPU.

---

4. Kết quả Benchmark thực tế

Chúng tôi sử dụng công cụ benchmark chuyên dụng wrk chạy trên một máy chủ độc lập trong cùng mạng nội bộ (LAN) để đảm bảo không bị ảnh hưởng bởi băng thông mạng. Kịch bản kiểm thử thực hiện giả lập 500 kết nối đồng thời trong vòng 30 giây.

Tiêu chí so sánhNode.js + ExpressBun + ElysiaJS
Requests Per Second (RPS)14,200 RPS81,500 RPS
Thời gian phản hồi trung bình (Latency)35ms2.1ms
Mức tiêu thụ CPU100% (Nghẽn)88% (Ổn định)
Mức tiêu thụ RAM180MB45MB

Kết quả cho thấy hiệu năng tăng trưởng gấp gần 6 lần, trong khi lượng RAM tiêu thụ giảm đáng kể xuống chỉ còn 1/4 so với Node.js. Đây là một con số không tưởng đối với một máy chủ VPS chỉ có 1 vCPU.

---

Kết luận và Khuyến nghị dành cho doanh nghiệp

Việc chuyển dịch từ Node.js sang Bun và ElysiaJS không chỉ giúp chúng tôi giải quyết bài toán hiệu năng trước mắt, mà còn mở ra một tư duy mới trong việc thiết kế hệ thống hiệu quả về chi phí (Cost-effective architecture). Thay vì chi hàng nghìn USD mỗi tháng cho việc nâng cấp phần cứng, doanh nghiệp hoàn toàn có thể đạt được hiệu năng tương đương hoặc cao hơn nhờ vào việc lựa chọn công nghệ tối ưu.

Nếu doanh nghiệp của bạn đang vận hành các dịch vụ Microservices quy mô lớn, các ứng dụng I/O intensive, hoặc đơn giản là muốn tối ưu hóa chi phí cloud, Bun và ElysiaJS chính là tương lai mà bạn nên đầu tư ngay từ hôm nay.

Tối ưu hóa Node.js REST API đạt mốc 80k RPS trên VPS 1 vCPU bằng cách chuyển dịch sang Bun và ElysiaJS | DPTCloud