পাবলিশ/সাবস্ক্রাইব কী?
পাবলিশ/সাবস্ক্রাইব (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 এর সাথে সংহতকরণ |