Tại sao cần Queue trong ứng dụng AI?
Khi người dùng ghi âm, LetMeNote cần gửi file âm thanh đến Gemini API, chờ transcription, phân tích ngữ nghĩa, tạo embedding và lưu vào Supabase. Toàn bộ quá trình mất 3-10 giây.
Vấn đề: nếu 100 người ghi âm cùng lúc, không thể xử lý tất cả ngay lập tức mà không làm quá tải server hoặc API rate limit. Giải pháp: Queue (hàng đợi).
BullMQ là gì?
BullMQ là thư viện Node.js để quản lý background jobs và queues, sử dụng Redis làm storage. LetMeNote dùng BullMQ để:
- Queue các AI processing jobs khi người dùng ghi chú
- Xử lý jobs theo thứ tự hoặc ưu tiên
- Retry tự động khi job thất bại
- Monitor trạng thái của mỗi job (pending, processing, done, failed)
Luồng xử lý trong LetMeNote
- Người dùng ghi âm → file được upload lên storage
- Job được thêm vào BullMQ queue với ID capture
- Status hiển thị "đang xử lý" trong UI
- Worker picks up job → gửi đến Gemini API
- AI xử lý → kết quả được lưu vào Supabase
- Realtime update: UI tự động hiển thị kết quả
Redis — Backbone của BullMQ
BullMQ dùng Redis để lưu trữ queue state, job data và kết quả. Redis là in-memory database cực nhanh, phù hợp cho task queue nơi tốc độ là ưu tiên.
LetMeNote chạy Redis qua Docker trong development và managed Redis service trong production.
Xử lý lỗi và retry logic
Khi Gemini API timeout hoặc trả về lỗi, BullMQ tự động retry job theo exponential backoff. Sau 3 lần thất bại, job được đưa vào "failed" queue để admin xem xét.
Kết luận
Queue system là backbone của mọi ứng dụng AI production-grade. BullMQ + Redis giúp LetMeNote xử lý AI tasks một cách đáng tin cậy và scalable. Người dùng luôn thấy trạng thái rõ ràng và không bao giờ mất ghi chú. Xem thêm về Supabase và kiến trúc LetMeNote.