Khi xây dựng hệ thống notification:
- Push notification
- SMS
- Zalo
- Telegram
nhiều người thường làm kiểu:
User Action
↓
Gửi notification trực tiếp
Ban đầu có thể chạy ổn.
Nhưng khi cần gửi tới:
- 10.000 user
- 100.000 devices
- Hoặc hàng triệu notification
thì hệ thống sẽ nhanh chóng gặp vấn đề:
- API chậm
- Request timeout
- CPU tăng cao
- Full RAM
- Crash server
Queue Là Gì?
Queue (hàng đợi) là nơi lưu các job cần xử lý.
Thay vì gửi notification trực tiếp:
User Action
↓
Push Job vào Queue
↓
Response ngay cho user
Worker phía sau sẽ xử lý việc gửi notification.
Kiến Trúc Cơ Bản
Application
↓
Queue
↓
Workers
↓
Firebase / SMS / Email
Vì Sao Nên Dùng Queue?
- API Nhanh Hơn Backend chỉ cần:
push job vào queue
là response ngay cho user.
- Chống Quá Tải Queue giúp xử lý notification dần dần thay vì bắn cùng lúc.
Giúp tránh:
- CPU spike
- Full RAM
- Rate limit
- Retry Khi Lỗi Ví dụ:
Firebase timeout
Worker có thể retry lại thay vì mất notification. 4. Dễ Scale Không đủ worker:
Worker 1
Worker 2
thì chỉ cần thêm:
Worker 3
Worker 4
Redis Queue Hoạt Động Thế Nào?
Producer:
await redis.lpush(
"notification_queue",
JSON.stringify(data)
);
Worker:
while (true) {
const job = await redis.brpop("notification_queue");
await sendNotification(job);
}
RabbitMQ Và Kafka Khác Gì Redis Queue?
Redis Queue
- Dễ setup
- Nhanh
- Phù hợp background job đơn giản
RabbitMQ
- Retry mạnh
- ACK message
- Ổn định cho notification
Kafka
- Throughput cực lớn
- Event streaming
- Scale mạnh
Một Số Queue Thường Có
- Retry queue
- Delay queue
- Dead letter queue
- Priority queue
Kết Luận
Queue gần như là thành phần bắt buộc trong các hệ thống notification hiện đại.
Nó giúp:
- API nhanh hơn
- Hệ thống ổn định hơn
- Retry tốt hơn
- Dễ scale hơn
Tư tưởng chung là:
Không xử lý nặng trực tiếp trong request
mà hãy:
đẩy vào queue và xử lý phía sau