পাবলিশ/সাবস্ক্রাইব কী?

পাবলিশ/সাবস্ক্রাইব (Pub/Sub) একটি মেসেজিং প্যাটার্ন যেখানে পাবলিশাররা কোনো নির্দিষ্ট রিসিভারের কাছে সরাসরি মেসেজ পাঠায় না, বরং একটি টপিক (বিষয়) এ পাঠায়। আর সাবস্ক্রাইবাররা সেই টপিকটি সাবস্ক্রাইব করে মেসেজ পায়। এতে করে পাঠক ও গ্রহীতার মধ্যে কোনো সরাসরি সম্পর্ক থাকে না।

সহজ ভাষায়: ইউটিউব চ্যানেলের মতো। আপনি একটি চ্যানেলে সাবস্ক্রাইব করেন (টপিক)। চ্যানেল ক্রিয়েটর একটি ভিডিও পাবলিশ করেন (মেসেজ)। ইউটিউব সব সাবস্ক্রাইবারকে নোটিফিকেশন দেয় – ক্রিয়েটরের জানার দরকার হয় না কে কে সাবস্ক্রাইবার।

মূল উপাদানসমূহ

উপাদান ভূমিকা
পাবলিশার মেসেজ তৈরি করে। সাবস্ক্রাইবার সম্পর্কে কিছু জানে না।
টপিক লজিক্যাল চ্যানেল (যেমন: "অর্ডার.ক্রিয়েটেড", "ইউজার.সাইনআপ")।
সাবস্ক্রাইবার এক বা একাধিক টপিকে আগ্রহ দেখায় এবং মেসেজ পায়।
মেসেজ ব্রোকার মিডলওয়্যার (Kafka, RabbitMQ, Redis ইত্যাদি) যা পাবলিশার থেকে সাবস্ক্রাইবারের কাছে মেসেজ পৌঁছে দেয়।

পাবলিশ/সাবস্ক্রাইব কেন ব্যবহার করবেন? (সুবিধাসমূহ)

১. ডিকপলিং – পাবলিশার ও সাবস্ক্রাইবার স্বাধীনভাবে পরিবর্তন হতে পারে।
২. স্কেলেবিলিটি – একই মেসেজ একাধিক সাবস্ক্রাইবার পড়তে পারে (যেমন: অডিট + বিলিং + অ্যানালিটিক্স)।
৩. ফ্লেক্সিবিলিটি – নতুন সাবস্ক্রাইবার যুক্ত করলে পাবলিশারকে স্পর্শ করতে হয় না।
৪. অ্যাসিঙ্ক্রোনাস কমিউনিকেশন – ব্লকিং অপেক্ষা নেই। রেসপন্সিভনেস বাড়ে।

বাস্তব উদাহরণ

  • ইভেন্ট-ড্রিভেন মাইক্রোসার্ভিস – অর্ডার সার্ভিস অর্ডার.পেইড পাবলিশ করে → পেমেন্ট সার্ভিস + শিপিং সার্ভিস + নোটিফিকেশন সার্ভিস সেই ইভেন্টে প্রতিক্রিয়া দেখায়।
  • রিয়েল-টাইম আপডেট – স্টক প্রাইস ফিড, লাইভ স্কোর অ্যাপ।
  • লগিং / মেট্রিক্স – প্রতিটি মাইক্রোসার্ভিস লগ পাবলিশ করে → সেন্ট্রাল লগ এগ্রিগেটর সাবস্ক্রাইব করে।
  • ডাটা রেপ্লিকেশন – CDC (Change Data Capture) যেমন Debezium → Kafka।

উদাহরণ (চিত্র)

              [পাবলিশার এ]  [পাবলিশার বি]
                    \            /
                     \          /
                 +----[টপিক "অর্ডার"]----+
                   /          |          \
       [সাবস্ক্রাইবার ১]  [সাবস্ক্রাইবার ২]  [সাবস্ক্রাইবার ৩]
        (ইমেইল পাঠাবে)   (ডিবি আপডেট করবে) (ওয়েবহুক কল করবে)

মেসেজ কিউ থেকে পার্থক্য

বৈশিষ্ট্য পাবলিশ/সাবস্ক্রাইব মেসেজ কিউ
মেসেজ গ্রহণ প্রতিটি সাবস্ক্রাইবার নিজস্ব কপি পায় শুধু একজন কনজিউমার মেসেজ পায়
কাপলিং আরও আলগা (পাবলিশার শুধু টপিক জানে) প্রযুডিউসার কিউয়ের নাম জানে
সাধারণ ব্যবহার ব্রডকাস্ট / ফ্যান-আউট কাজ বিতরণ (টাস্ক কিউ)

অনেক সিস্টেম দুইয়ের সংমিশ্রণ ব্যবহার করে: Kafka (Pub/Sub) + RabbitMQ (কিউ)। AWS SNS+SQS হলো হাইব্রিড সমাধান।

চ্যালেঞ্জ ও সমাধান

চ্যালেঞ্জ সমাধান
মেসেজের ক্রম নিশ্চিত করা পার্টিশন ব্যবহার (Kafka) / সিকোয়েন্স আইডি
ডেলিভারি গ্যারান্টি At-least-once, exactly-once (আইডেম্পোটেন্ট সাবস্ক্রাইবার দরকার)
ব্যাকপ্রেসার বাউন্ডেড কিউ + ফ্লো কন্ট্রোল
মনিটরিং / ব্যর্থ মেসেজ ডেড লেটার কিউ (DLQ) ব্যবহার

কখন পাবলিশ/সাবস্ক্রাইব ব্যবহার করবেন না

  • রিকোয়েস্ট-রিপ্লাই প্যাটার্ন দরকার হলে (REST/gRPC ভালো)
  • খুব কম লেটেন্সি আবশ্যক হলে (সরাসরি কল দ্রুততর)
  • সহজ সিঙ্ক্রোনাস ওয়ার্কফ্লো থাকলে (অতিরিক্ত জটিলতা)

জনপ্রিয় পাবলিশ/সাবস্ক্রাইব সিস্টেম

সিস্টেম টাইপ প্রধান বৈশিষ্ট্য
Apache Kafka ডিস্ট্রিবিউটেড লগ উচ্চ থ্রুপুট, রিপ্লে, অর্ডারিং
Redis Pub/Sub ইন-মেমরি কম লেটেন্সি, কোনো পার্সিসটেন্স নেই
RabbitMQ (topic exchange) মেসেজ ব্রোকার ফ্লেক্সিবল রাউটিং
Google Pub/Sub ম্যানেজড গ্লোবাল, অটো স্কেলিং
AWS SNS ম্যানেজড SQS/Lambda এর সাথে সংহতকরণ
Share