1. Tại sao xử lý đồng bộ không phù hợp với tác vụ nặng?
Hãy tưởng tượng bạn có một API như POST /api/generate-report
. Khi nhận request, server cần truy vấn dữ liệu lớn, xử lý và xuất ra file Excel hoặc PDF – những thao tác có thể mất hàng chục giây đến vài phút.
Nếu xử lý trực tiếp theo cách truyền thống:
2. Asynchronous Request-Reply là gì?
Đây là một kiến trúc cho phép xử lý các request lớn trong background, đồng thời vẫn đảm bảo người dùng nhận được kết quả sau cùng.
Microsoft định nghĩa như sau:
“Tách biệt phần xử lý backend khỏi frontend, nơi backend hoạt động bất đồng bộ nhưng frontend vẫn được thông báo kết quả cuối cùng.”

Nguyên lý hoạt động:
-
Frontend gửi yêu cầu → Backend lập tức phản hồi đã tiếp nhận yêu cầu, kèm theo jobId
hoặc URL tra cứu trạng thái.
-
Backend xử lý trong background – không giữ kết nối với client.
-
Client kiểm tra trạng thái job bằng jobId
, và nhận kết quả khi hoàn thành.
Giống như bạn đặt món ăn ở quán: bạn nhận thiết bị rung, đi làm việc khác, khi món sẵn sàng thì thiết bị báo – không cần đứng chờ.
3. Luồng hoạt động chi tiết
Mô hình này thường bao gồm 4 thành phần chính: Client, API Server, Message Queue và Worker.

Chi tiết các bước:
Ngoài việc polling, bạn cũng có thể dùng các cách thông báo chủ động hơn như WebSocket, Webhook, hoặc gửi email cho người dùng.
4. Triển khai demo bằng Node.js & TypeScript
Để minh họa, chúng ta sẽ xây dựng một API mô phỏng tác vụ xuất báo cáo bằng cách xử lý job bất đồng bộ trong memory.
Cài đặt và chuẩn bị
npm init -y npm install express typescript ts-node @types/express @types/node uuid @types/uuid npx tsc --init
Cấu trúc thư mục
src/types.ts
: Định nghĩa kiểu dữ liệu
src/server.ts
: Logic chính
5. Kiểm thử nhanh
6. Tổng kết
Asynchronous Request-Reply không chỉ là kỹ thuật backend giúp tránh timeout mà còn là một hướng đi hiệu quả để xây dựng các hệ thống có tính mở rộng cao. Bằng cách tách riêng phần xử lý khỏi phần phản hồi, bạn vừa tối ưu tài nguyên server, vừa cải thiện trải nghiệm người dùng đáng kể.