২০০০ সালে এরিক ব্রুয়ার ডিস্ট্রিবিউটেড কম্পিউটিং সম্মেলনে এমন একটি অনুমান উত্থাপন করেছিলেন যা আধুনিক ক্লাউড সফটওয়্যার আর্কিটেকচারের সবচেয়ে প্রভাবশালী সূত্রে পরিণত হয়: ক্যাপ উপপাদ্য (CAP Theorem)। পরবর্তীতে ২০০২ সালে সেথ গিলবার্ট এবং ন্যান্সি লিঞ্চ গাণিতিকভাবে প্রমাণ করেন যে, যেকোনো ডিস্ট্রিবিউটেড ডেটা সিস্টেমে তিনটি বৈশিষ্ট্যের মধ্যে সর্বোচ্চ দুটি একসাথে পাওয়া সম্ভব: কনসিস্টেন্সি (Consistency), অ্যাভেইলেবিলিটি (Availability) এবং পার্টিশন টলারেন্স (Partition Tolerance)।
১. গিলবার্ট ও লিঞ্চের গাণিতিক সংজ্ঞা
তাত্ত্বিক বিভ্রান্তি এড়াতে গিলবার্ট ও লিঞ্চ তিনটি ধারণাকে স্পষ্টভাবে সংজ্ঞায়িত করেন:
- কনসিস্টেন্সি ($mathcal{C}$): এটি মূলত লিনিয়ারাইজেবিলিটি (Linearizability)। সিস্টেমে ডেটা রিড ও রাইট অপারেশনগুলো রিয়েল টাইমে তাৎক্ষণিকভাবে বাস্তবায়িত হয়েছে বলে প্রতীয়মান হতে হবে। যেকোনো নোড থেকে রিড করলে সর্বশেষ আপডেটেড ডেটাটি পাওয়া নিশ্চিত হতে হবে।
- অ্যাভেইলেবিলিটি ($mathcal{A}$): প্রতিটি সচল নোডকে অবশ্যই যেকোনো অনুরোধের জবাবে একটি সফল (নন-এরর) উত্তর দিতে হবে। টাইমআউট বা ইন্টারনাল সার্ভার এরর দেওয়া অ্যাভেইলেবিলিটির পরিপন্থী।
- পার্টিশন টলারেন্স ($mathcal{P}$): নোডগুলোর মধ্যকার নেটওয়ার্ক ক্যাবল বিচ্ছিন্ন হয়ে সিস্টেম যদি দুই বা ততোধিক বিচ্ছিন্ন ভাগে ($G_1$ ও $G_2$) বিভক্ত হয়ে যায়, তবুও সিস্টেমের বেঁচে থাকার সক্ষমতা।
২. ক্যাপ উপপাদ্যের প্রমাণ
গিলবার্ট ও লিঞ্চের প্রমাণটি অত্যন্ত চমৎকার ও যুক্তিপূর্ণ:
- ধরি, একটি সিস্টেম নেটওয়ার্ক পার্টিশন ($mathcal{P}$) সত্ত্বেও একই সাথে কনসিস্টেন্সি ($mathcal{C}$) ও অ্যাভেইলেবিলিটি ($mathcal{A}$) দেওয়ার দাবি করে।
- একটি নেটওয়ার্ক বিপর্যয়ে ক্লাস্টারটি দুটি বিচ্ছিন্ন অংশে বিভক্ত হয়ে গেল: $G_1$ এবং $G_2$। তাদের মধ্যে সব বার্তা আদান-প্রদান বিচ্ছিন্ন।
- একজন ব্যবহারকারী $G_1$ অংশের একটি নোডে নতুন তথ্য রাইট করল: $text{write}(x, v_1)$। যেহেতু সিস্টেম অ্যাভেইলেবল ($mathcal{A}$), তাই $G_1$ সাথে সাথে সফল কনফার্মেশন দিল।
- একই মুহূর্তে আরেকজন ব্যবহারকারী $G_2$ অংশের একটি নোড থেকে $x$ রিড করল: $text{read}(x)$। যেহেতু সিস্টেম অ্যাভেইলেবল, তাই $G_2$-কেও তৎক্ষণাৎ উত্তর দিতে হবে।
- কিন্তু পার্টিশনের কারণে $v_1$ রাইটের খবর $G_2$-তে পৌঁছানো শারীরিকভাবে অসম্ভব ছিল। ফলে $G_2$ বাধ্য হয়ে পুরনো তথ্য $v_0$ ফেরত দিল।
- এটি লিনিয়ারাইজেবিলিটি বা কনসিস্টেন্সি ($mathcal{C}$) লঙ্ঘন করল, কারণ রাইট সম্পন্ন হওয়ার পর রিড অপারেশনটি পুরনো ডেটা দেখাল।
- অতএব প্রমাণিত হলো: নেটওয়ার্ক পার্টিশন হলে সিস্টেমকে অবশ্যই Consistency অথবা Availability-এর যেকোনো একটিকে ত্যাগ করতে হবে: $mathcal{P} implies (mathcal{A} oplus mathcal{C})$।
৩. ড্যানিয়েল আবাদির প্যাসল্ক (PACELC) উপপাদ্য
ইয়েল বিশ্ববিদ্যালয়ের অধ্যাপক ড্যানিয়েল আবাদি দেখান যে, বাস্তব ডেটাসেন্টারে নেটওয়ার্ক পার্টিশন একটি বিরল ঘটনা। স্বাভাবিক সময়ে সিস্টেম কীভাবে কাজ করে তা ক্যাপ উপপাদ্য ব্যাখ্যা করতে পারে না। এজন্য তিনি প্রস্তাব করেন PACELC উপপাদ্য:
$$text{যদি Partition } (P) text{ হয়: } (A lor C) text{ বেছে নাও; Else } (E) text{ স্বাভাবিক সময়ে: } (L lor C) text{ বেছে নাও}$$
অর্থাৎ স্বাভাবিক সময়েও যদি আপনি শতভাগ কনসিস্টেন্সি ($C$) চান, তবে প্রতি অপারেশনে অন্যান্য নোডের সাথে সমন্বয় করতে গিয়ে ল্যাটেন্সি ($L$) বেড়ে যাবে। আর ল্যাটেন্সি কমাতে চাইলে আংশিক কনসিস্টেন্সি স্যাক্রিফাইস করতে হবে।
৪. অপটিক্যাল ফাইবারে আলোর গতির প্রাকৃতিক দেওয়াল
গ্লাস ফাইবারে আলোর গতি শূন্য মাধ্যমের চেয়ে কম ($approx ২০৪,০০০text{ কিমি/সেকেন্ড}$)। ফলে নিউইয়র্ক থেকে টোকিও বা লন্ডন পর্যন্ত ১০,০০০ কিলোমিটার দূরত্বে একটি নেটওয়ার্ক প্যাকেটের একবার গিয়ে ফিরে আসতে (Round Trip Time বা RTT) তাত্ত্বিকভাবেই অন্তত **১০০ মিলিমিটার** সময় লাগে। কোনো সফটওয়্যার কোড বা ইঞ্জিনিয়ারিং দিয়ে আলোর এই প্রাকৃতিক গতিসীমাকে অতিক্রম করা সম্ভব নয়।