Publish-Subscribe (Pub/Sub)
এক প্রেরক, অনেক গ্রাহক — broadcast-style messaging।
একটি news magazine-এর কথা ভাবুন। তারা মাসে একটি issue publish করে। কে কে subscribe করেছে — সেটা magazine-এর জানা দরকার নেই। তারা শুধু publish করে; subscribed reader-রা পেয়ে যান। এটাই Pub-Sub pattern।
Pub-Sub কী?
Publish-Subscribe = একটি messaging pattern যেখানে publisher একটি topic-এ message পাঠায়, এবং সেই topic-এ subscribed সব consumer message-এর একটি copy পায়।
মূল উপাদান
- Publisher (Producer): Message তৈরি ও পাঠায়।
- Topic (Channel): Message-এর category/route।
- Subscriber (Consumer): Topic থেকে message receive।
- Message Broker: Topic ও subscription manage।
কাঠামো
Queue vs Pub-Sub
Queue (Point-to-Point)
- Each message একজন consumer পায়
- Load distribution
- Order processing
- RabbitMQ default queue
- Once consumed → deleted
Pub-Sub (Topic)
- সব subscriber copy পায়
- Broadcast/notification
- Event-driven
- Kafka, Redis Pub/Sub
- Multiple consumer groups
সুবিধা
- Loose coupling: Publisher ও subscriber একে অপরকে চেনে না।
- Scalability: অনেক subscriber যোগ করতে পারে — publisher unaffected।
- Flexibility: নতুন feature = নতুন subscriber, no code change publisher-এ।
- Asynchronous: Publisher fire-and-forget।
- Many-to-many: Multiple publisher, multiple subscriber।
কেমন event topic-এ যায়?
প্রতিটি domain event আলাদা topic-এ:
user.created→ email, analytics, recommendationorder.placed→ payment, inventory, shipping, notificationpayment.failed→ alerting, retry, customer servicevideo.uploaded→ transcoding, thumbnail gen, indexing
Pub-Sub Patterns
Fan-out
একটি event multiple subscriber-এ ছড়ানো।
উদাহরণ: Twitter user post → followers-এর timeline-এ inject।
Topic Filtering
Subscriber শুধু নির্দিষ্ট pattern-এর message পায়।
- Subscribe:
order.*→ সব order event। - Subscribe:
order.placed→ শুধু placed।
Hierarchical Topics
asia.bangladesh.dhaka.weather- Subscriber wildcards:
asia.*.dhaka.*
Consumer Groups
Kafka-এর শক্তি: multiple consumer একই group-এ থাকলে — load distribute। ভিন্ন group → broadcast।
জনপ্রিয় Pub-Sub Tools
- Apache Kafka: Industry leader, distributed log।
- Redis Pub/Sub: In-memory, fast, light-weight (no persistence default)।
- Redis Streams: Persistent + consumer groups।
- Google Cloud Pub/Sub: Managed, global scale।
- AWS SNS: Simple Notification Service — pub-sub managed।
- RabbitMQ topic exchange: Pub-sub routing।
- NATS: Cloud-native, high-performance।
Challenges
Subscriber Failure
Subscriber down থাকলে — message কী?
- Persistent topic (Kafka) → backlog থাকে।
- Non-persistent (Redis Pub/Sub) → মিস।
Message Ordering
Multiple publisher থেকে — order maintain কঠিন।
- Kafka partition-এ FIFO; cross-partition নেই।
Backpressure
Subscriber slow হলে — message জমে যায়।
- Auto-scale subscriber, consumer lag monitor।
Schema Evolution
Publisher schema বদলালে — old subscriber ভাঙে।
- Backward compatible (Avro, Protobuf)।
- Schema registry (Kafka)।
বাস্তব উদাহরণ
- Twitter: Tweet event → fan-out to followers-এর timeline।
- Uber: Driver location → multiple service (matching, surge, ETA)।
- Netflix: Viewing event → recommendation, billing, analytics।
- YouTube: Upload event → transcoding, indexing, notification।
- Banking: Transaction event → audit, alert, fraud detection।
কখন Pub-Sub?
- একটি event-এ multiple action দরকার।
- Loose coupling চান।
- Future flexibility — নতুন subscriber যোগ করার সম্ভাবনা।
- Notification, broadcast।
- Event-driven architecture।
- Real-time dashboard।
সাধারণ ভুল ধারণা
- "Pub-Sub = realtime": Async — exact realtime guarantee নেই।
- "All subscribers always receive": Subscriber down + non-persistent topic = miss।
- "Pub-Sub = Queue": Different pattern — broadcast vs point-to-point।
Best Practices
- Domain event টি base করে topic design।
- Schema evolution-এর জন্য Avro/Protobuf।
- Idempotent subscriber (duplicate handle)।
- Persistence + replay-এর জন্য Kafka।
- Monitor consumer lag।
- Topic naming convention —
domain.entity.event।
📌 চ্যাপ্টার সারমর্ম
- Pub-Sub = এক publisher → অনেক subscriber broadcast।
- Loose coupling, scalability, flexibility।
- Queue vs Pub-Sub: load distribute vs broadcast।
- Kafka, Redis, Google Pub/Sub — top tools।
- Subscriber failure, ordering, schema — main challenge।