কম্পিউটার টিউটোরিয়াল

Redis Pub/Sub ব্যাখ্যা: পাবলিশ/সাবস্ক্রাইব মেসেজিং দিয়ে স্কেলেবিলিটি বাড়ান

যখন আপনি এমন একটি অ্যাপ্লিকেশনে কাজ করছেন যা সহজে রক্ষণাবেক্ষণযোগ্য, স্কেলেবল এবং পারফরম্যান্ট হতে হবে, তবে পাবলিশ/সাবস্ক্রাইব মেসেজিং প্যাটার্ন একটি ভালো পছন্দ।

এটির পেছনে’idée সহজ কিন্তু শক্তিশালী। আমাদের আছে সেন্ডাররা যাদের পাবলিশার বলা হয়। তাদের একমাত্র ভূমিকা হলো মেসেজ পাবলিশ বা পাঠানো। তারা इसकी পারবাহ না করে কে সেগুলো রিসিভ করবে বা কেউ রিসিভ করবেনা। তারা শুধু পাঠিয়ে দিয়ে ভুলে যায়। এবং তারা এটি করে চ্যানেলগুলোর মাধ্যমে।

ইনদের টিভি চ্যানেলের মতো ভাবুন। আছে স্পোর্টস চ্যানেল, వেদার ফোরকাস্টিং চ্যানেল, কুকিং চ্যানেল, ইত্যাদি। প্রতিটি পাবলিশার তার মেসেজগুলো একটি নির্দিষ্ট চ্যানেলে পাঠায়, এবং যেই কেউ সেই চ্যানেলের জন্য সাবস্ক্রাইবড থাকবে, সে সেই মেসেজগুলো পাবে।

এখানেই আসে সাবস্ক্রাইবাররা। তারা এক বা একাধিক চ্যানেল সাবস্ক্রাইব করে সেখানে ব্রডকাস্ট হওয়া মেসেজগুলো রিসিভ করা শুরু করে।

যেমনकि ইতিমধ্যে বলা হয়েছে, মেসেজগুলো পাঠিয়ে দিয়ে ভুলে যাওয়ার টাইপ। এর মানে যদি একজন সাবস্ক্রাইবার একটি নির্দিষ্ট চ্যানেল সাবস্ক্রাইব করে, তবে সেই চ্যানেলে আগে পাঠানো সকল মেসেজ এই সাবস্ক্রাইবারের জন্য উপলব্ধ থাকবে না।

এই ধরণের আর্কিটেকচারের স্বভাবের কারণে, আমরা বিভিন্ন কম্পোনেন্টের মধ্যে লুজ কাপলিং সহজে অর্জন করতে পারি এবং রবাস্ট এবং সহজে রক্ষণাবেক্ষণযোগ্য অ্যাপ্লিকেশন বানানোর একটি স olid ফাউন্ডেশন তৈরি করতে পারি।

উদাহরণস্বরূপ, একটি পরিস্থিতি কল্পনা করুন যেখানে আমাদের আমাদের সিস্টেমের পাবলিশিং অংশটি রিপ্লেস বা উন্নত করতে হবে – মনে করুন আরও পাবলিশার, আরও চ্যানেল যোগ করা ইত্যাদি। যেহেতু দুটি অংশ আলাদা করা আছে, অর্থাৎ পাবলিশাররা সাবস্ক্রাইবারের কwohn না এবং সাবস্ক্রাইবাররা পাবলিশারদের কwohn না, আমরা সহজেই এটি করতে পারি অন্য কোনো অংশ ভাঙা হয়েছে কিনা তা চিন্তা ছাড়া। আমরা শুধু নতুন পাবলিশাররা যোগ করি। তারপর, যখন কোনো সাবস্ক্রাইবার প্রাসঙ্গিক চ্যানেলে আসে, সে সেগুলো ব্যবহার করা শুরু করে।

Redis কী?

Redis-এর প্রাথমিক Idee ছিল এটি একটি ইন-মেমরি ক্যাশ সমাধান হিসেবে কাজ করবে, এর পূর্ববর্তি Memcached-এর একটি বিকল্প হিসেবে।

কিন্তু আজকাল এটি একটি মেনি-ইন-ওয়ান সমাধান, যা প্রদান করে ইন-মেমরি ডেটা স্ট্রাকচার স্টোর, কি-ভ্যালু ডাটাবেস, মেসেজ ব্রোকারিং, ইত্যাদি। এটি এমন অ্যাপ্লিকেশন তৈরির জন্য একটি পরফেক্ট কান্ডিডেট যেটিকে খুব দ্রুত ক্যাশিং সমাধান এবং উপরে বলা অন্যান্য ফিচারগুলোর প্রয়োজন। বিশেষ করে যদি অ্যাপের পারফরম্যান্স এর সাধারণ ব্যবহারের জন্য অত্যন্ত গুরুত্বপূর্ণ হয়।

Redis পারফরম্যান্স তুলনা (সোর্স: গুগল)

Redis ব্যবহার করার সবচেয়ে বড় সুবিধাগুলোর একটি হলো এর বিশাল কমিউনিটি এবং অনলাইনে পাওয়া যাওয়া টেকনিক্যাল রিসোর্স। এদের মধ্যে অনেকটি বিনামূল্যে, এবং অনলাইন প্ল্যাটফর্মগুলোর ফ্রি টিয়ার অফারিংরহে।

Redis-র আর্সেনালে একটি ক্লাউড সমাধানও রয়েছে। আপনি যদি নিজে চেষ্টা করতে চান, তবে এখানে যান এবং একটি ফ্রি অ্যাকাউন্ট রেজিস্টার করুন বা তাদের প্রাথমিক কুপন অফার ব্যবহার করুন।

Redis এন্টারপ্রাইজ ক্লাউড সাইন আপ / সাইন ইন পেজ

Pub/Sub কী?

Redis-এ পাবলিশ/সাবস্ক্রাইব চ্যানেলগুলো একটি ফিচার যা আমি উপরে মেনশন করিনি কিন্তু এটি Redis-এর লেটেস্ট ভার্সনগুলোর অন্তর্ভুক্ত। এটি পাব/সাব মেসেজিং প্যাটার্নের তাদের ইমপ্লিমেন্টেশন, যেখানে আছে পাবলিশার এবং সাবস্ক্রাইবার যারা চ্যানেলের মাধ্যমে মেসেজ এক্সচেঞ্জ করে।

আমরা এটিকে সংক্ষেপে নিচে দেখব এবং তারপর একটি ছোট ডেমো অ্যাপে এটি প্র্যাকটিসে দেখব যা আমি আপনাদের জন্য প্রস্তুত করেছি।

Redis Pub/Sub কীভাবে কাজ করে?

আমাদের আছে পাবলিশাররা (মেসেজের প্রডিউসার), চ্যানেলগুলো (যারা মেসেজগুলো পাস করবে), এবং সাবস্ক্রাইবাররা (মেসেজের রিসিভার)। কে কী পাবে তা সম্পূর্ণরূপে নির্ভর করে কে কোন চ্যানেল সাবস্ক্রাইব করেছে।

একটি উদাহরণে দেখি কীভাবে এটি কাজ করে:

যদি আমাদের তিনটি পাবলিশার থাকে যারা তিনটি আলাদা চ্যানেলে মেসেজ পাবলিশ করবে। ডাকুন তাদের চ্যানেল ১, ২ এবং ৩। আমাদের তিনটি সাবস্ক্রাইবারও আছে, ডাকুন তাদের সাবস্ক্রাইবার A, B এবং C।

এখন, কল্পনা করুন সাবস্ক্রাইবার A সব তিনটি চ্যানেলের মেসেজ শুনছে, অর্থাৎ সে তিনটিতেই সাবস্ক্রাইবড। এবং সাবস্ক্রাইবার B এবং C চ্যানেল ২ এবং ৩-এ সাবস্ক্রাইবড। এর মানে যখন তিনটি পাবলিশারের যেকোনো একটি মেসেজ পাঠায়, সাবস্ক্রাইবার A সেটি পাবে। আর সাবস্ক্রাইবার B এবং C শুধু পাবলিশার ২ এবং ৩-এর মেসেজ পাবে, কারণ তারা শুধু চ্যানেল ২ এবং ৩-এর মেসেজ শুনছে।

লক্ষ্য করুন, আমাদের এক চ্যানেল ব্যবহার করে দুটি এন্টিটি আছে – একটি পাঠাচ্ছে, অন্যটি রিসিভ করছে – কিন্তু তারা সম্পূর্ণরূপে স্বতন্ত্র। এবং পাঠানো মেসেজগুলো পার্সিস্ট করা হয় না। একবার পাবলিশার পাঠালে সেগুলো ভুলে যাওয়া হয়। শুধু সেই এন্টিটিগুলো যারা পাঠানোর মুহূর্তে সাবস্ক্রাইবড ছিলেন, তারা পাবে।

Redis-এ Pub/Sub কীভাবে ব্যবহার করবেন

Redis-র সাথে ব্যবহার করার জন্য ক্লায়েন্ট লাইব্রেরির একটি বিশাল সংগ্রহ আছে। একটি ডেডিকেটেড পেজ আছে যেখানে সবাই যেতে পারে এবং নির্দিষ্ট প্রজেক্টের প্রয়োজন বা আপনার পছন্দের প্রোগ্রামিং ল্যাঙ্গুয়েজের উপর ভিত্তি করে একটি বেছে নিতে পারে।

Redis-এ কাজ করা লোকেরা এই রিপোজিটরি কয়েকটাকে রিকমেন্ডেড হিসেবে মার্ক করেছেন যা পছন্দ করা সহজ করে দেয়, যদি আপনি এতে নতুন হন।

নিচের আমাদের ডেমোর জন্য, আমি ioredis ব্যবহার করেছি, Node.js-র জন্য একটি ফুল-ফিচার্ড Redis ক্লায়েন্ট। আমি এটি বেছে নেছি কারণ ডেমো অ্যাপের UI React এবং Node.js-র সাথে বিল্ট, এবং আমার সার্ভার কোড এর সাথে খুব ভালো ফিট করে।

Redis Pub/Sub ডেমো

Redis Pub/Sub ভিজুয়ালাইজার অ্যাপ

শো টাইম!

ডেমো অ্যাপ্লিকেশনের Idee হলো ভিজুয়ালি দেখানো প্যাটার্নটি কীভাবে কাজ করে।

আপনি যখন প্রথম بار এটি খুলবেন, তখন তিনটি বাটন দেখবেন তিনটি কাল্পনিক টিভি চ্যানেলে: Weather, Sports এবং Music-এ সিম্পল মেসেজ (নিউজ) পাবলিশ করার জন্য।

পাবলিশ বাটনগুলোর নিচে থাকা কার্ডগুলো হলো সাবস্ক্রাইবাররা। একবার আপনি যেকোনো একটি এর ওপর মাউস কার্সর নিলে, সেটি ফ্লিপ হয়ে এর পিছনের পাশে যাবে এবং আপনি তিনটি বাটন দেখবেন। আপনি প্রতিটি বাটন ব্যবহার করে প্রাসঙ্গিক চ্যানেলে সাবস্ক্রাইব করতে পারেন।

একবার কোনো সাবস্ক্রাইবার কোনো চ্যানেলে সাইন আপ করলে এবং আপনি সেই চ্যানেলের আইকন বা পাবলিশ বাটনে ক্লিক করলে, আপনি কার্ডের সামনের দিকেই একটি স্যাম্পল নিউজ দেখতে পাবেন।

বিভিন্ন পাবলিশার/সাবস্ক্রাইবার কম্বিনেশন নিয়ে খেলুন এবং ফলাফল দেখুন।

আশা করি এটি উপরের উদাহরণে যা আমি ব্যাখ্যা করেছি সেটি বুঝতে আপনাকে সাহায্য করবে।

ডেমো অ্যাপ্লিকেশন লোকালি কীভাবে চালাবেন

ডেমো অ্যাপ্লিকেশন লোকালি ইনস্টল এবং চালানোর জন্য, নিচের ধাপগুলো অনুসরণ করুন (সকল কমান্ড রুট প্রজেক্ট ডিরেক্টরি থেকে চালানো বলে ধরা হয়েছে):

ফ্রন্টএন্ড চালান:

cd client
yarn && yarn dev

ব্যাকএন্ড চালান:

cd server
yarn
yarn start

এবং অবশেষে, আপনার লোকাল Docker ইনস্টলেশন ব্যবহার করুন (যদি না থাকে, তবে এখান থেকে পেতে পারেন) এটি চালানোর জন্য:

docker run -p 6379:6379 redislabs/redismod:preview

এটি সম্ভবত লোকালি Redis-র একটি রানিং কপি পাওয়ার সবচেয়ে সহজ পথ। অন্য অপশন হলো সরাসরি Redis Cloud ব্যবহার করে অ্যাপ্লিকেশন অনলাইন ডিপ্লয় করা। এটি একটি অপশন যা আমি এখনো এক্সপ্লোর করছি এবং যদি আমি এটি করতে পারি, তবে পুরো অ্যাপ ডিপ্লয় করব এবং আপনাদের জানাব।

উপসংহার

এই আর্টিকেল আপনাকে পাব/সাব মেসেজিং প্যাটার্ন বিষয়ে পরিচয় করিয়েছে। মনে রাখতে হবে যে যখনই আমরা একটি হাই পারফরম্যান্স অ্যাপ্লিকেশন বানাতে চাই যার লুজ কাপল্ড আর্কিটেকচার এবং রিয়েল-টাইম പോবিশ মেসেজিং ফিচার থাকে, তখন পাবলিশ/সাবস্ক্রাইব প্যাটার্ন এবং বিশেষ করে Redis বিবেচনা করা উচিত।

বাস্তবে Redis ব্যবহার করা অনেক রিয়েল-লাইফ অ্যাপ্লিকেশন ড্যাশবোর্ড-বেসড। এর মানে সাধারণত একটি সুন্দর ড্যাশবোর্ড স্ক্রিন থাকে, যা বিভিন্ন ডেটা দেখায়, প্রায়শে রিয়েল-টাইমে আপডেট হয়।

উদাহরণস্বরূপ, একটি নির্দিষ্ট এলাকার ট্রাফিক দেখানো একটি সিস্টেম কল্পনা করুন। এই ধরণের সফটওয়্যার পাব/সাব-এর সুবিধাগুলো লाभ उठানোর জন্য একটি পরফেক্ট কান্ডিডেট। এবং অনেক ক্ষেত্রে এটি Redis ব্যবহার করে অর্জিত হয়।

যেকোনো ক্ষেত্রে, ডেভেলপার এবং ইঞ্জিনিয়াররা হিসেবে, আমাদের সবসময় আমরা যে প্রজেক্টে কাজ করছি তার নির্দিষ্ট প্রয়োজনগুলো দ্বারা গাইডেড হওয়া উচিত। যখনই আমরা একটি নতুন প্যাটার্ন বা টেকনোলজি ইন্ট্রোডিউস করি, আমাদের সাবধানে করা উচিত এবং সিরিয়াস রিসার্চ দিয়ে ব্যাকআপ নেওয়া উচিত।

  1. Node.js, Socket.IO, এবং Redis দিয়ে স্কেলেবল রিয়েল-টাইম মাল্টিপ্লেয়ার টিক-ট্যাক-টো গেম বানান

  2. রুবিতে স্টেট মেশিন দক্ষতা অর্জন: একটি প্র্যাক্টিক্যাল গাইড

  3. অ্যান্ড্রয়েডে ট্রান্সপারেন্ট স্ট্যাটাসবার এবং একশনবার কীভাবে তৈরি করবেন?

  4. Selenium WebDriver জাভায় নির্দিষ্ট DIV-এ স্ক্রল করা