PACELC থিওরি
সবকিছু ঠিক থাকলেও শান্তি নাই!
“আরে ঘাবড়ানোর কিছু নেই,” বল্টু ভাই হাসতে হাসতে বললেন। “CAP থিওরির একটা বড় সমস্যা হলো, এটা শুধু তখন কাজ করে যখন সিস্টেমে 'নেটওয়ার্ক পার্টিশন (P)' বা কানেকশন লস হয়। কিন্তু তোর সার্ভার তো আর সারাদিন ডাউন থাকে না। ৯৯% সময় তো সব ঠিকই থাকে, তাই না?”
মন্টু মাথা নাড়ল, “হ্যাঁ, ঠিক থাকে।”
“সব ঠিক থাকলেও তোকে আরেকটা ডিসিশন নিতে হবে। PACELC থিওরিটাকে ভাঙলেই তুই পুরোটা বুঝে যাবি:
- PAC: যদি Partition (নেটওয়ার্ক সমস্যা) হয়, তবে তুই Availability নাকি Consistency বেছে নিবি? (যেটা তুই এতক্ষণ শিখলি)
- ELC: Else (আর যদি সব ঠিক থাকে), তবে তুই Latency (স্পিড) নাকি Consistency (নিখুঁত হিসাব) বেছে নিবি?”

মন্টু কনফিউজড হয়ে গেল, “সব ঠিক থাকলে স্পিড আর নিখুঁত হিসাবের মধ্যে আবার কিসের ট্রেড-অফ?”
“তোর বিড়ালটিউবের কথাই ধর,” বল্টু ভাই বোঝাতে শুরু করলেন। “সব সার্ভারের কানেকশন ঠিক আছে। এখন কেউ একটা ভিডিওতে লাইক দিল। তুই যদি Latency বা স্পিডকে বেশি গুরুত্ব দিস, সিস্টেম তখন লোকাল সার্ভারেই রিকোয়েস্টটা সাথে সাথে সেভ করে ইউজারকে সাকসেস দেখিয়ে দেবে এবং ব্যাকগ্রাউন্ডে আস্তেধীরে বাকি সার্ভারগুলোতে ডাটা পাঠাবে (অ্যাসিঙ্ক রেপ্লিকেশন)। তবে এই ব্যাকগ্রাউন্ড সিঙ্ক শেষ হওয়ার আগের কয়েক মিলি-সেকেন্ড অন্য এলাকার ইউজাররা একটু পুরোনো লাইক কাউন্ট দেখতে পারে।
আর তুই যদি চাস সবাই যেন একদম ১০০% নিখুঁত একই লাইক কাউন্ট দেখুক (Consistency), তবে সিস্টেমের ঝামেলা বাড়বে। তখন রিকোয়েস্ট কনফার্ম করার আগে সার্ভারগুলোকে নিজেদের মধ্যে আলাপ করে বা কোরাম (অধিকাংশ নোড) মিলিয়ে একদম সিঙ্ক করে নিতে হবে। এই যে সার্ভারে সার্ভারে নেটওয়ার্ক রাউন্ড-ট্রিপ বা দেনদরবার করতে হয়, এতে একটু সময় বেশি লাগে। ফলে ইউজারের লাইক বাটনে চাপ দেওয়ার পর রেসপন্স পেতে একটু দেরি হবে, অর্থাৎ Latency বেড়ে যাবে।”
মন্টু এবার পরিষ্কার বুঝতে পারল। “তার মানে ভাই, ডাটাবেস দুনিয়ায় কোনো ম্যাজিক নেই। রিয়েল টাইমে চ্যাটিং অ্যাপ বা বিড়ালটিউব বানালে আমাকে স্পিড বা Latency-কে প্রায়োরিটি দিতে হবে। আর ব্যাংকের লেনদেন বানালে আমাকে একটু স্লো হলেও Consistency-কে প্রায়োরিটি দিতে হবে।”
বল্টু ভাই মন্টুর পিঠ চাপড়ে দিলেন। “এক্সাক্টলি! তুই এবার আসল আর্কিটেক্টের মতো চিন্তা করতে শুরু করেছিস!”
মন্টুর মাথায় এতক্ষণের ঘোরটা কাটল। সে বুঝতে পারল, সিস্টেম ডিজাইনে 'ম্যাজিক' বলে কিছু নেই, আছে শুধু 'ট্রেড-অফ'। একটা জিনিস বেশি চাইলে আরেকটা জিনিস একটু ছাড় দিতেই হবে।
মন্টু হাসিমুখে বলল, “থ্যাঙ্ক ইউ বল্টু ভাই! আমি এতক্ষণ শুধু স্পিড আর পারফেকশন একসাথে খুঁজছিলাম। এখন বুঝতে পারছি, বিড়ালটিউবের জন্য আমাকে AP (Availability) আর Latency-কে মাথায় রেখে সিস্টেম সাজাতে হবে।”
বল্টু ভাই চায়ের কাপটা টেবিলে রেখে মুচকি হাসলেন। “এইতো, একদম ঠিকঠাক ভাবে বুঝে গেছিস।”