0

Vì Sao Hệ Thống Notification Luôn Cần Queue?

Khi xây dựng hệ thống notification:

  • Push notification
  • SMS
  • Email
  • 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?

  1. API Nhanh Hơn Backend chỉ cần:
push job vào queue

là response ngay cho user.

  1. 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
  1. 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


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí