Pub/Sub (Publish/Subscribe) হল একটি কমিউনিকেশন মডেল যেখানে বার্তা প্রেরণকারী (Publisher) একটি বার্তা তৈরি করে এবং এটি একটি নির্দিষ্ট চ্যানেলে পাঠায়। অন্যদিকে, গ্রাহকরা (Subscribers) সেই চ্যানেলের প্রতি সাবস্ক্রাইব করে, এবং যখনই একটি নতুন বার্তা সেই চ্যানেলে আসে, তখন তারা সেটি গ্রহণ করে। Redis এই Pub/Sub মডেলটি সাপোর্ট করে এবং এটি রিয়েল-টাইম অ্যাপ্লিকেশনগুলিতে ব্যবহার করা যেতে পারে যেখানে দ্রুত এবং কার্যকরী বার্তা প্রেরণ প্রয়োজন হয়।
Redis Pub/Sub মডেল ব্যবহার করে, আপনি সহজে বিভিন্ন সিস্টেম বা সার্ভিসের মধ্যে বার্তা শেয়ার করতে পারেন, বিশেষত যখন একাধিক উপাদান বা সার্ভিসের মধ্যে একসাথে ইভেন্ট বা তথ্য পাঠানো প্রয়োজন হয়।
Redis Pub/Sub Model এর মূল উপাদান:
- Publisher: এটি একটি উপাদান যা একটি চ্যানেলে বার্তা পাঠায়।
- Subscriber: এটি একটি উপাদান যা একটি নির্দিষ্ট চ্যানেল বা চ্যানেলগুলোতে সাবস্ক্রাইব করে এবং সেই চ্যানেলে কোনো বার্তা আসলে তা গ্রহণ করে।
- Channel: এটি একটি নামিত স্পেস যা বার্তা পাঠানোর এবং গ্রহণ করার জন্য ব্যবহার করা হয়। Publishers বার্তা এই চ্যানেলে পাঠায় এবং Subscribers এই চ্যানেলটি সাবস্ক্রাইব করে।
Redis Pub/Sub ব্যবহার করার জন্য প্রয়োজনীয় পদক্ষেপ
Redis Pub/Sub ব্যবহারের জন্য আপনাকে Redis সার্ভার সেটআপ করতে হবে এবং তারপরে বিভিন্ন ক্লায়েন্ট থেকে Pub/Sub সিস্টেমে যুক্ত হতে হবে।
Step 1: Redis ইনস্টলেশন
Redis ইনস্টল করার জন্য আপনাকে Redis এর অফিসিয়াল সাইট থেকে Redis ডাউনলোড করতে হবে। আপনি যদি Node.js ক্লায়েন্ট ব্যবহার করতে চান, তবে আপনি ioredis বা node-redis প্যাকেজ ব্যবহার করতে পারেন।
Step 2: Node.js এর মাধ্যমে Redis Pub/Sub ব্যবহার করা
এখানে, আমরা Node.js এবং ioredis প্যাকেজ ব্যবহার করে Redis Pub/Sub সিস্টেম সেটআপ করব।
Install ioredis Package
npm install ioredisPublisher Code (Node.js)
const Redis = require('ioredis');
const redis = new Redis();
// বার্তা পাঠানোর জন্য পাবলিশার
setInterval(() => {
const message = `Hello, Pub/Sub at ${new Date().toISOString()}`;
redis.publish('myChannel', message); // myChannel নামে চ্যানেলে বার্তা পাঠানো
console.log('Message sent:', message);
}, 5000); // প্রতি ৫ সেকেন্ড পর পর বার্তা পাঠানো হবেSubscriber Code (Node.js)
const Redis = require('ioredis');
const redis = new Redis();
// একটি চ্যানেলে সাবস্ক্রাইব করা
redis.subscribe('myChannel', (err, count) => {
if (err) {
console.log('Error subscribing:', err);
return;
}
console.log(`Subscribed to ${count} channel(s).`);
});
// চ্যানেলে বার্তা পাওয়ার পর এই হ্যান্ডলারটি চলবে
redis.on('message', (channel, message) => {
console.log(`Received message from ${channel}: ${message}`);
});ব্যাখ্যা:
- Publisher:
redis.publish('myChannel', message)ফাংশন ব্যবহার করে একটি নির্দিষ্ট চ্যানেলে বার্তা পাঠানো হয়। এই কোডে প্রতি ৫ সেকেন্ড পর পর বার্তা পাঠানো হচ্ছে। - Subscriber:
redis.subscribe('myChannel')ফাংশন ব্যবহার করে চ্যানেল সাবস্ক্রাইব করা হচ্ছে। যখন চ্যানেলে বার্তা আসবে, তখনmessageইভেন্ট ট্রিগার হবে এবংredis.on('message', ...)হ্যান্ডলার চলবে।
Redis Pub/Sub মডেলের কার্যপ্রণালী
- Publisher একটি বার্তা প্রেরণ করে নির্দিষ্ট চ্যানেলে।
- Subscriber সেই চ্যানেলটিতে সাবস্ক্রাইব করে থাকে এবং যখনই একটি নতুন বার্তা আসে, এটি স্বয়ংক্রিয়ভাবে গ্রহণ করে।
- একাধিক Subscribers একই চ্যানেলে সাবস্ক্রাইব করতে পারে এবং সকল সাবস্ক্রাইবাররা একই বার্তা গ্রহণ করবে।
Pub/Sub মডেলের সুবিধা
- ডিকাপলিং (Decoupling): Publisher এবং Subscriber এর মধ্যে কোনো সরাসরি সম্পর্ক নেই, তারা একে অপরকে জানে না। এর ফলে, আপনি পৃথকভাবে Publisher এবং Subscriber এর কার্যকলাপ পরিচালনা করতে পারেন।
- স্কেলেবিলিটি: Redis Pub/Sub মডেল ব্যবহার করে আপনি সহজেই আপনার সিস্টেম স্কেল করতে পারেন, যেখানে একাধিক Subscriber একটি চ্যানেল থেকে বার্তা গ্রহণ করতে পারে।
- রিয়েল-টাইম কমিউনিকেশন: Pub/Sub মডেল খুবই দ্রুত এবং রিয়েল-টাইম বার্তা আদান-প্রদান সক্ষম করে, যা চ্যাট অ্যাপ্লিকেশন, লাইভ নোটিফিকেশন সিস্টেম এবং গেমিং ইত্যাদির জন্য উপযুক্ত।
- ফ্লেক্সিবিলিটি: যেকোনো সময় একটি নতুন Subscriber চ্যানেলে যোগ হতে পারে বা বিদ্যমান Subscriber চ্যানেল ছাড়তে পারে।
Redis Pub/Sub এর সীমাবদ্ধতা
- Persistent Data: Redis Pub/Sub মডেল দ্বারা পাঠানো বার্তাগুলি সাধারণত volatile (অস্থায়ী) থাকে। অর্থাৎ, যদি কোন Subscriber চ্যানেল থেকে সংযোগ বিচ্ছিন্ন হয়, তবে এটি সংযোগ পুনরায় স্থাপিত না হওয়া পর্যন্ত কোনো বার্তা পাবে না। Redis Pub/Sub তে কোনো বার্তা persistence থাকে না।
- Message Delivery Guarantee: Redis Pub/Sub মডেলটি at most once delivery গ্যারান্টি দেয়, যা মানে হল যে বার্তাগুলি একবারই পাঠানো হয় এবং হারানো যেতে পারে যদি কোনও সমস্যা হয়। তবে, আপনি Redis Streams ব্যবহার করলে আপনি at least once delivery গ্যারান্টি পেতে পারেন।
Redis Pub/Sub মডেল-এর অন্যান্য ব্যবহারের ক্ষেত্র
- চ্যাট সিস্টেম: মাল্টিপ্লেয়ার চ্যাট সিস্টেমে বিভিন্ন চ্যানেলে বার্তা প্রেরণ এবং গ্রহণ করা।
- নোটিফিকেশন সিস্টেম: একাধিক ব্যবহারকারীকে রিয়েল-টাইম নোটিফিকেশন পাঠানো।
- গেমিং: মাল্টিপ্লেয়ার গেমের মধ্যে রিয়েল-টাইম তথ্য শেয়ার করা (যেমন প্লেয়ার পজিশন বা স্কোর আপডেট)।
- ডিস্ট্রিবিউটেড সিস্টেম: একাধিক সার্ভার বা মাইক্রোসার্ভিসের মধ্যে বার্তা শেয়ার করা এবং সিঙ্ক্রোনাইজ করা।
সারাংশ
Redis এর Pub/Sub মডেল একটি শক্তিশালী, সহজ এবং দ্রুত রিয়েল-টাইম বার্তা আদান-প্রদান ব্যবস্থা প্রদান করে। এটি বিশেষভাবে ডিস্ট্রিবিউটেড সিস্টেম, চ্যাট সিস্টেম, লাইভ নোটিফিকেশন এবং মাল্টিপ্লেয়ার গেম এর জন্য উপযুক্ত। Redis Pub/Sub মডেল দিয়ে আপনি যে কোনো সিস্টেমে দ্রুত বার্তা প্রেরণ করতে পারেন এবং সেটা একাধিক Subscriber এর মধ্যে শেয়ার করতে পারেন।
Read more