Message Queue (Hàng đợi thông điệp)
Thành phần trung gian cho phép các phần hệ thống giao tiếp GIÁN TIẾP qua việc gửi/nhận thông điệp bất đồng bộ. Một bên bỏ nhiệm vụ vào hàng đợi, bên kia rảnh thì lấy ra làm - không bắt bên gửi phải chờ.
Ví dụ quán ăn đông: phục vụ ghi phiếu gọi món ghim vào bảng trong bếp (queue) rồi đi tiếp; đầu bếp lần lượt lấy phiếu ra nấu.
Mô hình Producer – Queue – Consumer
- Producer: tạo & đẩy message vào queue rồi tiếp tục việc của mình.
- Queue: giữ message (thường FIFO) đến khi có consumer lấy. Có thể trong RAM (nhanh, dễ mất) hoặc ghi đĩa (bền).
- Consumer: lấy message ra xử lý theo tốc độ riêng. Muốn nhanh hơn → thêm consumer song song.
Producer và consumer không giao tiếp trực tiếp → tạo decoupling (rời rạc), hệ thống linh hoạt, dễ mở rộng.
Khi nào nên dùng
- Tác vụ nền (gửi email xác nhận, xử lý video) - trả lời người dùng ngay, làm sau.
- Giảm tải đỉnh điểm (flash sale) - queue làm bộ đệm, server xử lý dần, không sập.
- Giao tiếp microservices - service A gửi “Order Created”, B/C lắng nghe xử lý.
- Logging/analytics - thu thập sự kiện.
Backpressure (phản áp lực)
Khi producer gửi nhanh hơn consumer xử lý → message ùn ứ, có thể sập. Cơ chế kiểm soát: chặn producer khi queue đầy (RabbitMQ), giảm tốc producer, hoặc scale thêm consumer.
Hệ thống phổ biến: RabbitMQ (task queue, reliable), Kafka (throughput cao, lưu lịch sử, pub-sub), AWS SQS (managed).
Liên quan
- Scalability · Throughput - điều hòa tải, xử lý bất đồng bộ
- Idempotency - consumer cần idempotent phòng message trùng lặp
- RPC - cách giao tiếp đồng bộ (đối lập async queue)