Distributed System Concepts (ডিস্ট্রিবিউটেড সিস্টেম ডিপ-ডাইভ)
ডিস্ট্রিবিউটেড সিস্টেম হলো একাধিক কম্পিউটারের একটি গ্রুপ যা ইউজারের কাছে একটি সিঙ্গেল সিস্টেম হিসেবে কাজ করে। এর জটিলতাগুলো সামলানোর জন্য কিছু কোর কনসেপ্ট বোঝা জরুরি।
১. হার্টবিটস এবং ফল্ট টলারেন্স (Heartbeats & Failures)
হার্টবিটস (Heartbeats)
এটি একটি মেকানিজম যার মাধ্যমে একটি নোড অন্য নোডকে সিগন্যাল পাঠায় যে সে "বেঁচে আছে" (Alive)। যদি নির্দিষ্ট সময় পর সিগন্যাল না আসে, তবে ধরে নেওয়া হয় নোডটি ডাউন হয়ে গেছে।
হ্যান্ডলিং ফেইলিওর (Handling Failures)
ডিস্ট্রিবিউটেড সিস্টেমে ফেইলিওর অনিবার্য। এটি সামলানোর জন্য Replication এবং Redundancy ব্যবহার করা হয়।
২. কনসেনসাস এবং লিডার ইলেকশন (Consensus & Leader Election)
কনসেনসাস অ্যালগরিদম (Consensus Algorithms)
যখন একাধিক নোডকে কোনো একটি নির্দিষ্ট ভ্যালু বা সিদ্ধান্তের ওপর একমত হতে হয়, তখন কনসেনসাস প্রয়োজন।
- অ্যালগরিদম: Paxos, Raft. (Raft বর্তমানে বেশি জনপ্রিয় কারণ এটি বোঝা সহজ)।
লিডার ইলেকশন (Leader Election)
একটি ক্লাস্টারের মধ্যে একটি 'Leader' চয়ন করা হয় যে সব রাইট রিকোয়েস্ট কোঅর্ডিনেট করে। বাকিরা 'Follower' হিসেবে কাজ করে। লিডার ডাউন হয়ে গেলে নতুন লিডার নির্বাচনের প্রক্রিয়া শুরু হয়।
৩. ডিস্ট্রিবিউটেড ট্রানজ্যাকশন (Distributed Transactions)
একাধিক ডাটাবেস বা সার্ভিসে ট্রানজ্যাকশন সফল করা বেশ কঠিন। এর জন্য প্রধান দুটি পদ্ধতি হলো:
ক. Two-Phase Commit (2PC)
১. Prepare Phase: কোঅর্ডিনেটর সবাইকে জিজ্ঞাসা করে তারা ট্রানজ্যাকশনের জন্য রেডি কি না। ২. Commit Phase: সবাই রেডি থাকলে কোঅর্ডিনেটর সবাইকে 'Commit' করতে বলে। (সমস্যা: এটি ব্লকিং পদ্ধতি)।
খ. Three-Phase Commit (3PC)
এটি 2PC এর ব্লকিং সমস্যা সমাধান করার চেষ্টা করে একটি অতিরিক্ত 'Pre-commit' ফেজ যোগ করে।
৪. গসিপ প্রোটোকল (Gossip Protocol)
এটি একটি তথ্য ছড়িয়ে দেওয়ার পদ্ধতি (Epidemic protocol)। একটি নোড তার কয়েকটা প্রতিবেশীকে কোনো তথ্য দেয়, তারা আবার তাদের প্রতিবেশীকে দেয়—এভাবে দ্রুত পুরো ক্লাস্টারে তথ্য ছড়িয়ে পড়ে। এটি অত্যন্ত স্কেলেবল।
৫. ভেক্টর ক্লক এবং CRDTs (Consistency Mechanisms)
ভেক্টর ক্লক (Vector Clocks)
ডিস্ট্রিবিউটেড সিস্টেমে যখন গ্লোবাল টাইম থাকে না, তখন ইভেন্টের ক্রম (Order) বোঝার জন্য ভেক্টর ক্লক ব্যবহার করা হয়। এটি ডেটা কনফ্লিক্ট ডিটেক্ট করতে সাহায্য করে।
CRDTs (Conflict-free Replicated Data Types)
এগুলো এমন বিশেষ ডেটা স্ট্রাকচার যা একাধিক নোডে আলাদাভাবে আপডেট হলেও পরে মার্জ করলে কোনো কনফ্লিক্ট ছাড়াই সঠিক রেজাল্ট দেয়। (উদা: Google Docs এ রিয়েল-টাইম এডিটিং)।
৬. সাধারণ ইন্টারভিউ প্রশ্নোত্তর (General Q&A)
প্রশ্ন ১: কেন ডিস্ট্রিবিউটেড সিস্টেমে গ্লোবাল টাইমস্ট্যাম্প (Time) ব্যবহার করা ঝুঁকিপূর্ণ?উত্তর: কারণ সব সার্ভারের ক্লক একদম নিখুঁতভাবে একই সেকেন্ডে রাখা অসম্ভব (Clock Skew)। তাই ইভেন্টের ক্রম বোঝার জন্য লজিক্যাল ক্লক (উদা: Lamport Clock, Vector Clock) ব্যবহার করা হয়।
প্রশ্ন ২: Paxos এবং Raft এর মধ্যে পার্থক্য কী?উত্তর: Paxos খুবই পাওয়ারফুল কিন্তু অনেক জটিল। Raft মূলত Paxos এরই একটি সহজ সংস্করণ যা লিডার ইলেকশন এবং লগ রেপ্লিকেশন সহজভাবে হ্যান্ডেল করে।
প্রশ্ন ৩: 'Saga Pattern' কী?উত্তর: ডিস্ট্রিবিউটেড ট্রানজ্যাকশনের একটি বিকল্প পদ্ধতি। এখানে প্রতিটি সার্ভিস তার কাজ শেষ করে একটি ইভেন্ট পাঠায়। যদি কোনো স্টেপ ফেইল করে, তবে আগের সার্ভিসগুলো রিভার্স বা কম্পেনসেটিং ট্রানজ্যাকশন চালায়।
৭. সিনারিও ভিত্তিক প্রশ্ন (Scenario-based Questions)
সিনারিও ১: "আপনার ক্লাস্টার থেকে একটি নোড ড্রপ করেছে। আপনি কীভাবে নিশ্চিত করবেন যে অন্য নোডগুলো দ্রুত এই তথ্যটি জানবে?"
সমাধান: এখানে আমি Gossip Protocol বা Heartbeats এর সাহায্য নেব। প্রতিবেশীরা একে অপরের হার্টবিট চেক করবে এবং কোনো সমস্যা পেলে গসিপ প্রোটোকলের মাধ্যমে দ্রুত পুরো নেটওয়ার্কে জানিয়ে দেবে।
সিনারিও ২: "ক্যাসান্দ্রা ডাটাবেস কীভাবে ডেটা কনফ্লিট সমাধান করে?"
সমাধান: ক্যাসান্দ্রা মূলত Last Write Wins (LWW) পদ্ধতি ব্যবহার করে। তবে উন্নত সমাধানের জন্য অনেক ক্ষেত্রে Vector Clocks বা CRDTs এর মতো পদ্ধতিগুলো ব্যবহার করা হয় যেখানে ডেটার ইতিহাস ট্র্যাক করে মার্জ করা হয়।
সিনারিও ৩: "একটি ডিস্ট্রিবিউটেড সিস্টেমে রাইট রিকোয়েস্টগুলোর সিরিয়াল বজায় রাখা কেন জরুরি?"
সমাধান: কারণ যদি রিকোয়েস্টের ক্রম ঠিক না থাকে, তবে ডেটাবেস ইনকনসিস্টেন্ট হয়ে যাবে। ধরুন ইউজার প্রথমে টাকা তুললেন তারপর জমা দিলেন, কিন্তু সিস্টেম ভাবল প্রথমে জমা তারপর তোলা। এর জন্য Log Replication বা Sequencers ব্যবহার করা হয়।
CAUTION
ডিস্ট্রিবিউটেড সিস্টেমে Network Partition হওয়া স্বাভাবিক। তাই আপনার ডিজাইন যেন CAP Theorem মেনে এভেইল্যাবিলিটি বা কনসিস্টেন্সি—যেকোনো একটিকে প্রায়োরিটি দেয়, তা নিশ্চিত করুন।