Redis Cluster একটি ডিস্ট্রিবিউটেড রেডিস আর্কিটেকচার যা ডেটা পার্টিশনিং (Data Partitioning) বা শার্ডিং (Sharding) সমর্থন করে। এতে, রেডিসের ডেটা একাধিক নোডে ভাগ হয়ে থাকে এবং সার্ভারের লোডকে ভারসাম্যপূর্ণভাবে বিতরণ করে, ফলে সিস্টেমটি আরও স্কেলেবল এবং উচ্চ পারফরম্যান্সযোগ্য হয়।
Redis Cluster এ Data Partitioning
রেডিস ক্লাস্টার ডেটা পার্টিশনিংয়ের জন্য মাল্টিপল শার্ড ব্যবহার করে। প্রতিটি শার্ড ক্লাস্টারের একটি নির্দিষ্ট অংশের ডেটা ধারণ করে। রেডিস ক্লাস্টারের মধ্যে ডেটা পার্টিশনিং করার জন্য, একটি নির্দিষ্ট hash slot ব্যবস্থা ব্যবহৃত হয়। এই পদ্ধতিতে:
- মোট 16,384 Hash Slots ব্যবহার করা হয়।
- ডেটা পার্টিশনিং: সমস্ত কিপেয়ারগুলিকে এই 16,384 হ্যাশ স্লটের মধ্যে বিভক্ত করা হয়, এবং প্রতিটি স্লট একাধিক রেডিস নোডের মধ্যে বিতরণ করা হয়।
- ডিস্ট্রিবিউটেড শার্ডিং: ক্লাস্টারের প্রতিটি নোড একটি বা একাধিক হ্যাশ স্লট ধারণ করে, এবং সেই স্লটের মধ্যে থাকা কিপেয়ারগুলির উপর রিড/রাইট অপারেশন পরিচালনা করে।
Redis Cluster-এ Data Partitioning Working Principle
Hash Slot Calculation: রেডিস ক্লাস্টারে ডেটার partitioning করার জন্য কিপেয়ারগুলিকে hash slots-এ ম্যাপ করা হয়। মোট 16,384 হ্যাশ স্লট থেকে একটি কিপেয়ার নির্বাচন করা হয় যেটি hash slot-এর মধ্যে থাকবে। কিপেয়ারের জন্য সঠিক hash slot পেতে, রেডিস একটি hashing algorithm ব্যবহার করে।
কিপেয়ারের জন্য সঠিক হ্যাশ স্লট নির্ধারণের জন্য, রেডিস CRC16 এলগরিদম ব্যবহার করে এবং তারপরে এটি 16,384 স্লটের মধ্যে একটি স্লটে ম্যাপ করে।
hash_slot = CRC16(key) % 16384- Data Distribution: রেডিস ক্লাস্টার বিভিন্ন নোডে এই 16,384 হ্যাশ স্লটগুলিকে বিভক্ত করে রাখে। উদাহরণস্বরূপ:
- নোড 1 স্লট 0 থেকে 1023 পর্যন্ত কিপেয়ার ধারণ করতে পারে।
- নোড 2 স্লট 1024 থেকে 2047 পর্যন্ত কিপেয়ার ধারণ করতে পারে।
- এভাবে, পুরো 16,384 স্লট বিভিন্ন নোডে ভাগ হয়ে থাকে।
- Scalability: যখন ক্লাস্টারে নতুন নোড যোগ করা হয়, তখন নতুন নোডটি স্লটগুলো গ্রহণ করতে পারে এবং ডেটা রিবালেন্সিং স্বয়ংক্রিয়ভাবে সম্পন্ন হয়। এটি ডেটা অ্যাক্সেসের ভারসাম্যপূর্ণ বিতরণ নিশ্চিত করে।
- Cross Slot Operations: যদি কোনও অপারেশন একাধিক হ্যাশ স্লটের মধ্যে হয়ে থাকে, তবে রেডিস ক্লাস্টার সেই অপারেশনটি সম্পাদন করতে পারবে না। উদাহরণস্বরূপ, যদি দুটি কিপেয়ার দুটি আলাদা হ্যাশ স্লটে থাকে, তাহলে তাদের উপর একই ট্রানজ্যাকশন বা মুলতুবি অপারেশন চালানো সম্ভব হবে না। তবে, MOVED এবং ASK এর মতো রিডিরেকশন কমান্ডের মাধ্যমে এ ধরনের সমস্যা মোকাবিলা করা হয়।
Redis Cluster-এ Data Partitioning এর সুবিধা
- স্কেলেবিলিটি (Scalability):
- রেডিস ক্লাস্টারের মধ্যে ডেটা শার্ডিংয়ের মাধ্যমে, আপনি ডেটাবেসের আকার বৃদ্ধি করতে পারেন এবং আরও নোড যোগ করে অ্যাপ্লিকেশনের স্কেলআপ করতে পারেন। ক্লাস্টারটি স্বয়ংক্রিয়ভাবে নতুন নোডে ডেটা পুনঃবণ্টন (resharding) করবে।
- লোড ব্যালেন্সিং (Load Balancing):
- ডেটা বিভিন্ন নোডে সমানভাবে বিতরণ করা হয়, ফলে সার্ভারের উপর লোড কমে এবং অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি পায়।
- হাই অ্যাভেইলিবিলিটি (High Availability):
- ডেটার কপির জন্য Replica (স্লেভ) নোড ব্যবহার করা হয়, যাতে কোনো নোড ব্যর্থ হলে অন্য নোডগুলি ডেটার কপি রেখে অ্যাপ্লিকেশনের সিস্টেমের অ্যাভেইলিবিলিটি বজায় থাকে।
- ডিস্ট্রিবিউটেড রিড/রাইট অপারেশন (Distributed Read/Write Operations):
- রেডিস ক্লাস্টার প্রতিটি নোডে ডেটা রিড/রাইট অপারেশন করতে পারে, যা পারফরম্যান্স বৃদ্ধিতে সাহায্য করে। ডিস্ট্রিবিউটেড সিস্টেমের কারণে একাধিক ক্লায়েন্ট একই সময় বিভিন্ন নোডে একাধিক অপারেশন করতে সক্ষম হয়।
Redis Cluster Setup Example for Data Partitioning
যদি আপনি রেডিস ক্লাস্টার তৈরি করতে চান, তাহলে কিছু সাধারণ কনফিগারেশন এবং স্টেপগুলো নিম্নরূপ হতে পারে:
Redis Cluster Nodes Setup: প্রথমে, কমপক্ষে তিনটি রেডিস সার্ভার (নোড) চালু করুন। প্রতিটি সার্ভারে
redis.confফাইলের মধ্যেcluster-enabledঅপশনটিyesকরতে হবে।cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000Redis Cluster Creation: একাধিক রেডিস সার্ভার প্রস্তুত করার পর, ক্লাস্টার তৈরি করতে
redis-cliব্যবহার করুন। উদাহরণস্বরূপ:redis-cli --cluster create <node1-ip>:6379 <node2-ip>:6379 <node3-ip>:6379 --cluster-replicas 1Verifying Cluster Setup: ক্লাস্টার সফলভাবে তৈরি হলে, আপনি ক্লাস্টারের স্ট্যাটাস চেক করতে পারেন:
redis-cli -c -h <node-ip> -p 6379 cluster infoHandling Data Distribution: একবার ক্লাস্টার তৈরি হলে, আপনি যেকোনো কিপেয়ার সন্নিবেশ করতে পারেন এবং তা স্বয়ংক্রিয়ভাবে সঠিক হ্যাশ স্লট এবং নোডে বিতরণ হবে:
redis-cli -h <node-ip> -p 6379 SET key1 "value1"
সারাংশ
Redis Cluster ডেটা পার্টিশনিংয়ের জন্য 16,384 hash slots ব্যবহার করে এবং এই স্লটগুলিকে বিভিন্ন নোডে বিতরণ করে। এটি ডেটার স্কেলেবিলিটি, লোড ব্যালেন্সিং এবং হাই অ্যাভেইলিবিলিটি নিশ্চিত করে। রেডিস ক্লাস্টার শার্ডিং এবং রিপ্লিকেশনকে একত্রিত করে ডিস্ট্রিবিউটেড সিস্টেম তৈরি করতে সহায়তা করে, যার মাধ্যমে আপনি রেডিস সার্ভারগুলির মধ্যে ডেটা সঠিকভাবে শেয়ার করতে পারেন এবং আরও স্কেলেবল অ্যাপ্লিকেশন তৈরি করতে সক্ষম হন।
Read more