Introduction
1. Event-Driven, Message Queue, và Message Broker là gì?
Ba khái niệm này đều liên quan đến việc giao tiếp giữa các thành phần trong một hệ thống phân tán, nhưng có sự khác biệt rõ ràng về cách hoạt động và mục đích sử dụng.
2. Event-Driven Architecture (EDA) – Kiến trúc hướng sự kiện
👉 Event-Driven là một kiến trúc trong đó các thành phần giao tiếp với nhau thông qua sự kiện (event). Một thành phần phát ra (publish) một sự kiện, và các thành phần khác có thể lắng nghe (subscribe) để xử lý sự kiện đó.
✅ Đặc điểm:
Không đồng bộ: Thành phần phát sự kiện không cần chờ phản hồi từ thành phần khác.
Loose coupling (khớp nối lỏng lẻo): Các dịch vụ có thể hoạt động độc lập, chỉ cần biết đến sự kiện chứ không cần quan tâm ai sẽ xử lý nó.
Realtime Processing: Thích hợp cho các hệ thống cần xử lý sự kiện ngay lập tức.
✅ Ví dụ:
Khi một người dùng đặt hàng, hệ thống phát ra một sự kiện OrderCreated.
Các dịch vụ khác như Inventory Service, Notification Service, Payment Service lắng nghe sự kiện đó và xử lý tương ứng (cập nhật kho hàng, gửi email xác nhận, xử lý thanh toán, v.v.).
✅ Công nghệ phổ biến:
Kafka, RabbitMQ, AWS SNS, Google Pub/Sub, Redis Stream.
3. Message Queue (MQ) – Hàng đợi tin nhắn
👉 Message Queue là một cơ chế giao tiếp point-to-point giữa producer (người gửi) và consumer (người nhận). Tin nhắn được đặt vào hàng đợi (queue) và được xử lý tuần tự.
✅ Đặc điểm:
FIFO (First-In-First-Out): Tin nhắn được xử lý theo thứ tự nhận.
Tính bền vững (durability): Tin nhắn có thể được lưu trữ đến khi consumer lấy ra và xử lý.
Cần consumer để xử lý: Nếu không có consumer, tin nhắn sẽ nằm trong hàng đợi.
Một consumer xử lý một tin nhắn: Không có cơ chế fan-out như Event-Driven.
✅ Ví dụ:
Khi Order Service gửi một tin nhắn "Create Order" đến Inventory Service, tin nhắn sẽ đợi trong queue cho đến khi Inventory Service xử lý nó.
Nếu Inventory Service bị tắt, tin nhắn vẫn tồn tại trong hàng đợi và sẽ được xử lý khi nó hoạt động trở lại.
✅ Công nghệ phổ biến:
RabbitMQ, ActiveMQ, Amazon SQS, Redis Queue.
4. Message Broker – Bộ trung gian tin nhắn
👉 Message Broker là một hệ thống trung gian giúp gửi tin nhắn giữa các thành phần trong hệ thống. Nó có thể hỗ trợ cả message queue và event-driven.
✅ Đặc điểm:
Routing & Transformation: Điều hướng tin nhắn đến đúng nơi.
Buffering: Lưu trữ tin nhắn tạm thời nếu hệ thống bị quá tải.
Cung cấp nhiều mô hình giao tiếp:
Point-to-Point (Queue - hàng đợi)
Publish-Subscribe (Topic - chủ đề)
✅ Ví dụ:
RabbitMQ có thể hoạt động như Message Queue (point-to-point) hoặc Pub/Sub (event-driven).
Kafka hoạt động chủ yếu theo mô hình event-driven.
✅ Công nghệ phổ biến:
RabbitMQ, Kafka, NATS, Amazon SQS/SNS, Google Pub/Sub.
5. So sánh tổng quan
Kiểu giao tiếp
Pub/Sub (fan-out)
Point-to-Point
Cả hai
Cách hoạt động
Publish event, listener xử lý
Producer gửi message, consumer xử lý tuần tự
Trung gian phân phối message
Tính đồng bộ
Không đồng bộ
Không đồng bộ
Cả hai (tùy cách sử dụng)
Lưu trữ tin nhắn
Thường không lưu lâu dài
Có thể lưu trữ tin nhắn đến khi xử lý
Có thể lưu trữ tùy cấu hình
Ví dụ công nghệ
Kafka, SNS, Google Pub/Sub
RabbitMQ, ActiveMQ, Redis Queue
RabbitMQ, Kafka
Tổng kết
Event-Driven là kiến trúc giúp hệ thống giao tiếp thông qua sự kiện.
Message Queue là một cơ chế giao tiếp theo kiểu hàng đợi (FIFO, point-to-point).
Message Broker là một hệ thống trung gian giúp quản lý và điều phối tin nhắn.
Last updated