Publisher-Subscriber (Pub-Sub) là một mô hình giao tiếp không đồng bộ, trong đó Publisher (Người xuất bản) gửi thông điệp mà không cần biết ai sẽ nhận, và Subscriber (Người đăng ký) chỉ nhận thông điệp mà họ quan tâm thông qua một hệ thống trung gian gọi là Message Broker.

1. Publisher-Subscriber
Mô hình thường được sử dụng trong các hệ thống phân tán, xử lý dữ liệu theo luồng và ứng dụng thời gian thực.
1.1. Các thành phần chính của mô hình Pub-Sub
- Publisher (Người xuất bản):
- Gửi thông điệp đến hệ thống trung gian (Broker).
- Không quan tâm đến danh sách Subscriber.
- Subscriber (Người đăng ký):
- Đăng ký nhận thông điệp thuộc một hoặc nhiều chủ đề (Topic).
- Nhận thông điệp khi có Publisher gửi.
- Message Broker (Trung gian xử lý thông điệp):
- Nhận thông điệp từ Publisher.
- Phân phối thông điệp đến các Subscriber phù hợp.
- Topic (Chủ đề):
- Là kênh giao tiếp, giúp phân loại thông điệp.
- Subscriber có thể đăng ký nhiều Topic cùng lúc.
1.2. Mô hình tổng quan

2. Cơ chế truyền thông điệp trong Pub-Sub
Mô hình Publisher-Subscriber hoạt động theo cơ chế push-based hoặc pull-based, tùy thuộc vào thiết kế hệ thống.
2.1. Cách thức hoạt động
- Publisher gửi thông điệp đến Message Broker theo một Topic cụ thể.
- Message Broker lưu trữ và quản lý danh sách Subscriber đăng ký nhận thông điệp
- Message Broker chuyển tiếp thông điệp đến tất cả Subscriber đã đăng ký chủ đề tương ứng.
2.2. Mô hình hoạt động

- Publisher gửi thông điệp đến Topic.
- Broker phân phối thông điệp cho Subscriber đã đăng ký chủ đề đó
3. Ưu điểm, nhược điểm của Pub-Sub
3.1. Ưu điểm:
- Tính mở rộng cao: Có thể hỗ trợ hàng triệu Publisher và Subscriber mà không ảnh hưởng đến hiệu suất.
- Tính linh hoạt: Các thành phần không phụ thuộc trực tiếp vào nhau, giúp dễ dàng mở rộng hệ thống.
- Không cần quản lý kết nối trực tiếp: Publisher không cần biết Subscriber nào sẽ nhận dữ liệu.
- Hiệu suất cao: cơ chế xử lý không đồng bộ, giúp hệ thống hoạt động nhanh hơn.
3.2. Nhược điểm:
- Khó theo dõi luồng dữ liệu: Do tính chất phân tán, việc debug hoặc kiểm tra lỗi có thể phức tạp.
- Tốn tài nguyên lưu trữ: Nếu hệ thống có quá nhiều Topic hoặc Subscriber, Message Broker có thể bị quá tải.
- Chậm trễ trong truyền dữ liệu: Nếu hệ thống có quá nhiều Topic hoặc Subscriber, Message Broker có thể bị quá tải.
4. Khi nào nên sử dụng
Mô hình Pub-Sub phù hợp với các hệ thống cần xử lý dữ liệu theo thời gian thực và mô hình phân tán, chẳng hạn:
- Hệ thống thông báo sự kiện (Event-Driven System): Facebook, Twitter, Instagram.
- Hệ thống Log và Giám sát: Elasticsearch, Kafka, Splunk sử dụng Pub-Sub để thu thập và phân tích logs.
- Ứng dụng giao dịch tài chính: Giao dịch chứng khoán-giá cổ phiếu theo thời gian thực
Một số ứng dụng thực tế: Apache Kafka, RabbitMQ, AWS SNS (Simple Notification Service), MQTT (Message Queuing Telemetry Transport),…
5. Kết luận
Mô hình Pub-Sub là một mô hình thiết kế phân tán, linh hoạt và mở rộng, giúp tách biệt các thành phần của hệ thống và cải thiện hiệu suất. Nó được sử dụng rộng rãi trong các ứng dụng yêu cầu linh hoạt, mở rộng và xử lý dữ liệu thời gian thực.
Nếu bạn đang xây dựng một hệ thống microservices, xử lý dữ liệu real-time, hoặc hệ thống log lớn, Publisher-Subscriber là một mô hình đáng cân nhắc!
Leave a Reply