Distributed Key-Value Store (ডিস্ট্রিবিউটেড কি-ভ্যালু স্টোর ডিজাইন)
কি-ভ্যালু স্টোর হলো এমন একটি সিস্টেম যা কি (Key) এবং ভ্যালু (Value) আকারে ডেটা সেভ করে (উদা: Redis, DynamoDB)। ডিস্ট্রিবিউটেড কি-ভ্যালু স্টোরের মূল চ্যালেঞ্জ হলো কোটি কোটি ডেটাকে অনেকগুলো সার্ভারে ভাগ করে রাখা।
১. রিকয়ারমেন্টস (Requirements)
- Scalability: ডেটা বাড়ার সাথে সাথে সার্ভার সংখ্যা বাড়ানো সহজ হতে হবে।
- High Availability: কোনো সার্ভার ডাউন হলেও যেন ডেটা পাওয়া যায়।
- Tunable Consistency: ইউজার চাইলে স্পিড (Eventual Consistency) অথবা নির্ভুলতা (Strong Consistency) বেছে নিতে পারবে।
২. কোর মেকানিজম: কনসিসটেন্ট হ্যাশিং (Consistent Hashing)
ডেটাকে বিভিন্ন সার্ভারে ভাগ করার জন্য সাধারণ হ্যাশিং (key % n) ব্যবহার করলে সার্ভার সংখ্যা পরিবর্তন হলে সব ডেটা রিলোকেট করতে হয়। সমাধান হলো Consistent Hashing:
- একটি 'Hash Ring' কল্পনা করা হয় যেখানে সার্ভার এবং ডেটা উভয়কেই হ্যাশ করে বসানো হয়।
- এতে একটি সার্ভার যোগ বা বিয়োগ করলে খুব সামান্য পরিমাণ ডেটা মুভ করতে হয়।
৩. ডেটা রেপ্লিকেশন (Data Replication)
হাই এভেইল্যাবিলিটি নিশ্চিত করতে প্রতিটি ডেটাকে একাধিক (উদা: ৩টি) সার্ভারে কপি করে রাখা হয়। সাধারণত কনসিসটেন্ট হ্যাশিং রিংয়ে ক্লক-ওয়াইজ পরবর্তী ৩টি সার্ভারে ডেটা স্টোর করা হয়।
৪. কনফ্লিক্ট রেজোলিউশন (Conflict Resolution)
একাধিক নোডে একই ডেটা আলাদাভাবে আপডেট হলে কোনটি সঠিক তা বোঝার জন্য Vector Clocks ব্যবহার করা হয়। এটি ডেটার ভার্সনিং ট্র্যাক করে এবং বলে দেয় কোন আপডেটটি আগে হয়েছে।
৫. হ্যান্ডলিং ফেইলিওর (Gossip Protocol)
কোন সার্ভার ডাউন হয়েছে তা বোঝার জন্য প্রতিটি সার্ভার অন্য সার্ভারের সাথে কথা বলে (Gossip)। যদি কোনো সার্ভার থেকে অনেকক্ষণ রেসপন্স না আসে, তবে তাকে 'Down' হিসেবে মার্ক করা হয়।
৬. সিনারিও ভিত্তিক প্রশ্ন (Scenario-based Questions)
সিনারিও ১: "আপনি এমন একটি সিস্টেম ডিজাইন করছেন যেখানে ডেটা হারানো যাবে না (যেমন ব্যাংকিং লেজার)। আপনি CAP থিওরেমের কোনটি বেছে নেবেন?"
সমাধান: আমি CP (Consistency & Partition Tolerance) বেছে নেব। কারণ এভেইল্যাবিলিটি একটু কমলেও ডেটার নির্ভুলতা বা কনসিস্টেন্সি এখানে বেশি জরুরি।
সিনারিও ২: "আপনার সিস্টেমে হঠাৎ একটি সার্ভার ডাউন হয়ে গেছে। আপনি কীভাবে রাইট রিকোয়েস্ট হ্যান্ডেল করবেন?"
সমাধান: আমি Sloppy Quorum এবং Hinted Handoff ব্যবহার করব। অর্থাৎ ডাউন সার্ভারের ডেটা সাময়িকভাবে অন্য একটি হেলদি সার্ভারে রেখে দেব এবং সেটি যখন ঠিক হবে তখন ডেটা ফেরত দেব।
IMPORTANT
ডিস্ট্রিবিউটেড কি-ভ্যালু স্টোর ডিজাইন করার সময় CAP Theorem এবং Consistent Hashing—এই দুটি টপিক নিয়ে অবশ্যই আলোচনা করবেন।