Part 3 · আর্কিটেকচার 📖 ১২ মিনিট পড়া 📝 ২০টি কুইজ

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।

কাঠামো

[Publisher A] ─┐ [Publisher B] ─┤ ├─→ [Topic: order_events] ─→ [Subscriber 1: Email] ├→ [Subscriber 2: Analytics] ├→ [Subscriber 3: Inventory] └→ [Subscriber 4: Recommendation]

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, recommendation
  • order.placed → payment, inventory, shipping, notification
  • payment.failed → alerting, retry, customer service
  • video.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।

  • 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।

সাধারণ ভুল ধারণা

  1. "Pub-Sub = realtime": Async — exact realtime guarantee নেই।
  2. "All subscribers always receive": Subscriber down + non-persistent topic = miss।
  3. "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।