মন্টু মিয়াঁর সিস্টেম ডিজাইন

CAP থিওরি

এক সিটে দুই যাত্রী

চায়ে চুমুক দিতে দিতে বল্টু ভাই গল্পের সুরে বলা শুরু করলেন, “মন্টু ধর, তুই ‘রেডলাইন’ নামের একটা বাস সার্ভিস চালু করলি। দিনে ১০টা করে বাস ঢাকা থেকে চট্টগ্রাম যায়। প্রতি বাসে ৫০টা করে সব মিলিয়ে ৫০০টা সিট। ঢাকার ভেতরে ৫টা কাউন্টার আছে তোর বাসের। এখন ৫টা কাউন্টারের ম্যানেজারকেই তো জানতে হবে সিট আদৌ ফাঁকা আছে কি না। এজন্য তুই ওদের নিয়ে একটা হোয়াটসঅ্যাপ গ্রুপ খুলে দিলি। নিয়ম হলো, কেউ একটা টিকিট বিক্রি করলেই গ্রুপে মেসেজ দেবে, আর সেটা দেখে বাকিরা যার যার খাতায় হিসাব আপডেট করে নেবে। দিনে ৫০০ টিকিট বিক্রি হয়ে গেলে কাউন্টার ক্লোজ।”

— “বাহ, চমৎকার বুদ্ধি তো! কোনো ঝামেলাই নাই।”

— “ঝামেলা তো মাত্র শুরু! একদিন স্যাটেলাইটে পানি ঢুকে সারা দেশে ইন্টারনেট বন্ধ হয়ে গেল। তোর ম্যানেজারদের হোয়াটসঅ্যাপও বন্ধ। কেউ আর কাউকে জানাতে পারছে না কে কয়টা টিকিট বিক্রি করল। বাস কোম্পানির মালিক হিসেবে এ রকম বিপদের জন্য তোর কাছে এখন দুইটা রাস্তা খোলা আছে।”

partition

— “কী কী রাস্তা?”

— “এক, তুই ম্যানেজারদের কড়া নির্দেশ দিয়ে রাখবি, যখনই হোয়াটসঅ্যাপ বন্ধ হবে, সাথে সাথে টিকিট বিক্রিও বন্ধ! অন্য কাউন্টারের হিসাব না জানা পর্যন্ত কেউ একটা টিকিটও বিক্রি করতে পারবে না।”

— “এ কাজ করলে তো ভাই ব্যবসা লাটে উঠবে! কাস্টমার ফিরে গেলে তো বদনাম হবে। আরেকটা রাস্তা কী?”

— “আরেকটা হলো, তুই ম্যানেজারদের বলে রাখবি, হিসাবের গুষ্টি কিলাই, ইন্টারনেট থাকুক বা না থাকুক, কাস্টমার যেন ফিরে না যায়! যার কাছে যা টিকিট আছে, সেভাবেই বিক্রি করতে থাকো, যা হবে পরে দেখা যাবে।”

— “তাহলে ভাই, তারা নিজেদের মধ্যে কথা বলতে না পেরে যদি দিনে ৫০০-এর জায়গায় ৭০০-৮০০ টিকিট বিক্রি করে ফেলে? তখন তো কাস্টমার বাসে উঠে সিট না পেয়ে আমাকে ধরে মারবে!”

মন্টু এবার একদম চুপ। সে বুঝতে পারছে সমস্যাটা কোথায়।

বল্টু ভাই মন্টুর কাঁধে হাত রেখে বললেন, “এই যে ইন্টারনেট চলে যাওয়ায় তোর কাউন্টারগুলোর নিজেদের মধ্যে যোগাযোগ বিচ্ছিন্ন হয়ে গেল, ডিস্ট্রিবিউটেড সিস্টেমের ভাষায় একে বলে 'নেটওয়ার্ক পার্টিশন' (Network Partition)। আর রিয়েল ওয়ার্ল্ডে নেটওয়ার্ক কখনো না কখনো কাটা পড়বেই, এই রূঢ় সত্যটা মেনে নেওয়াটাই হলো Partition Tolerance (P)।”

মন্টু মাথা নেড়ে বললো, “বুঝলাম ভাই।”

— “যখনই কাউন্টারগুলোর যোগাযোগ বন্ধ হয়ে যাবে, তখন মালিক হিসেবে তোকে দুইটা রাস্তার মধ্যে যেকোনো একটা বেছে নিতে হবে। তুই চাইলে টিকিট ডাবল বুকিং ঠেকানোর জন্য সব কাউন্টারে বিক্রি বন্ধ করে দিতে পারিস, যাতে ডাটা বা হিসাব একদম নিখুঁত থাকে, সিস্টেমের এই বৈশিষ্ট্যকে বলে Consistency (C)। আর তুই যদি চাস কাউন্টার কোনো অবস্থাতেই বন্ধ হবে না, কাস্টমার যেন খালি হাতে না ফেরে, তবে তোকে ভুল হিসাবের ঝুঁকি নিয়ে হলেও বিক্রি চালু রাখতে হবে, এটাকে বলে Availability (A)।”

বল্টু ভাই চায়ে চুমুক দিয়ে বলে যাচ্ছেন, “কাউন্টার একাধিক থাকলেও যতক্ষণ তারা একে অপরের সঙ্গে ঠিকমতো যোগাযোগ করতে পারছে, ততক্ষণ Consistency আর Availability, দুটোই রাখা সম্ভব। সমস্যা শুরু হবে তখনই, যখন কাউন্টারগুলোর যোগাযোগ সত্যিই বিচ্ছিন্ন হয়ে যাবে। সেই Network Partition চলাকালে তুই একইসঙ্গে নিখুঁত Consistency আর পুরোপুরি Availability guarantee করতে পারবি না। তখন যেকোনো একদিকে ছাড় দিতে হবে, এটাই CAP Theorem-এর আসল কথা।”