Message Queue cơ bản - part 7

Message Queue cơ bản - part 7

·

4 min read

Có ba khái niệm cơ bản trong hệ thống phân phối tin nhắn và xử lý dữ liệu: hàng đợi (queues), luồng (streams), và pub/sub (publish/subscribe). Dưới đây là sự khác biệt chính giữa chúng:

  1. Hàng đợi (Queues):

    • Hàng đợi (queues) thường được sử dụng trong mô hình đồng bộ hóa, nơi các tin nhắn được đẩy vào hàng đợi và xử lý một cách tuần tự.

    • Các tin nhắn được đẩy vào hàng đợi theo thứ tự và được xử lý theo thứ tự đó.

    • Là một cấu trúc dữ liệu dạng FIFO (First In, First Out) - nghĩa là tin nhắn nào đến trước sẽ được xử lý trước.

    • Lưu trữ các tin nhắn một cách tuần tự, mỗi tin nhắn có một định dạng xác định.

    • Sử dụng cho các trường hợp cần đảm bảo thứ tự xử lý tin nhắn.

    • Ví dụ: Hệ thống đặt hàng, hệ thống thanh toán.

    • Một ví dụ điển hình là RabbitMQ hoặc Apache ActiveMQ.

  2. Luồng (Streams):

    • Luồng (streams) là một dòng dữ liệu không giới hạn và không bị chia thành các đơn vị diskret như trong hàng đợi.

    • Dữ liệu trong luồng thường được xử lý một cách liên tục và song song, thường là dữ liệu cần được xử lý theo thời gian thực hoặc dữ liệu lớn.

    • Là một chuỗi các sự kiện hoặc dữ liệu liên tục được truyền tải theo thời gian thực.

    • Không có thứ tự cố định, các sự kiện có thể đến bất cứ lúc nào.

    • Sử dụng cho các trường hợp cần xử lý dữ liệu ngay lập tức, không cần lưu trữ hay sắp xếp.

    • Ví dụ: Hệ thống phân tích dữ liệu thời gian thực, hệ thống theo dõi hoạt động người dùng.

    • Kafka Streams là một ví dụ phổ biến về công nghệ luồng.

  3. Pub/Sub (Publish/Subscribe):

    • Pub/Sub là mô hình trong đó các nhà sản xuất (publishers) gửi các tin nhắn tới một chủ đề (topic), và các người tiêu dùng (subscribers) đăng ký để nhận các tin nhắn từ các chủ đề đó.

    • Các tin nhắn không được lưu trữ trong hàng đợi mà được gửi trực tiếp tới người tiêu dùng đăng ký.

    • Là một mô hình truyền thông phi đồng bộ, cho phép nhiều người đăng ký (subscribe) để nhận thông báo từ một hoặc nhiều nhà xuất bản (publisher).

    • Khi một publisher gửi thông báo (message), tất cả các subscriber đã đăng ký sẽ nhận được thông báo đó.

    • Không đảm bảo thứ tự nhận tin nhắn, các subscriber có thể nhận tin nhắn theo thứ tự bất kỳ.

    • Sử dụng cho các trường hợp cần truyền tải thông tin đến nhiều người nhận cùng lúc mà không cần quan tâm đến thứ tự nhận.

    • Ví dụ: Hệ thống thông báo tin tức, hệ thống nhắn tin tức thời

    • Các ví dụ về pub/sub bao gồm Apache Kafka, Google Cloud Pub/Sub, và Amazon SNS (Simple Notification Service).

Bảng so sánh:

Tính năngQueuesStreamsPub/Sub
Cấu trúc dữ liệuFIFOLuồng dữ liệuPhi cấu trúc
Thứ tự xử lýCó thứ tựKhông có thứ tựKhông có thứ tự
Lưu trữLưu trữ tin nhắnKhông lưu trữKhông lưu trữ
Xử lýXử lý tuần tựXử lý theo thời gian thựcXử lý phi đồng bộ
Trường hợp sử dụngHệ thống đặt hàng, hệ thống thanh toánHệ thống phân tích dữ liệu thời gian thực, hệ thống theo dõi hoạt động người dùngHệ thống thông báo tin tức, hệ thống nhắn tin tức thời

Lựa chọn sử dụng Queues, Streams hay Pub/Sub phụ thuộc vào nhu cầu cụ thể của ứng dụng.

  • Queues: Sử dụng khi cần đảm bảo thứ tự xử lý tin nhắn và lưu trữ tin nhắn.

  • Streams: Sử dụng khi cần xử lý dữ liệu thời gian thực và không cần lưu trữ hay sắp xếp.

  • Pub/Sub: Sử dụng khi cần truyền tải thông tin đến nhiều người nhận cùng lúc mà không cần quan tâm đến thứ tự nhận.