ডিস্ট্রিবিউটেড সিস্টেমে সময় যেখানে আপেক্ষিক, সেখানে একাধিক কম্পিউটারের মাঝে ঐকমত্য (Consensus) প্রতিষ্ঠা করা গাণিতিকভাবে অত্যন্ত জটিল। ১৯৮৫ সালে মাইকেল ফিশার, ন্যান্সি লিঞ্চ এবং মাইকেল প্যাটারসন কম্পিউটার বিজ্ঞানের ইতিহাসে এক যুগান্তকারী উপপাদ্য প্রমাণ করেন, যা এফএলপি অসম্ভবতা উপপাদ্য (FLP Impossibility Theorem) নামে পরিচিত। এতে অকাট্যভাবে প্রমাণিত হয়: একটি অ্যাসিঙ্ক্রোনাস নেটওয়ার্কে যদি মাত্র একটি কম্পিউটারও অপ্রত্যাশিতভাবে ক্র্যাশ করার ঝুঁকিতে থাকে, তবে কোনো ডিটারমিনিস্টিক অ্যালগরিদম কখনোই শতভাগ ঐকমত্যের নিশ্চয়তা দিতে পারে না।
১. ডিস্ট্রিবিউটেড ব্যর্থতার মডেল
ডিস্ট্রিবিউটেড আর্কিটেকচারে সিস্টেমের পরিবেশকে কয়েকটি নির্দিষ্ট তাত্ত্বিক মডেলে বিভক্ত করা হয়:
- নেটওয়ার্ক টাইমিং মডেল:
- সিঙ্ক্রোনাস (Synchronous): নেটওয়ার্কে বার্তা পৌঁছানোর সময় এবং প্রসেসরের গতি সুনির্দিষ্ট সীমার মধ্যে আবদ্ধ। টাইমআউট ব্যবহার করে সহজেই মৃত নোড শনাক্ত করা যায়।
- অ্যাসিঙ্ক্রোনাস (Asynchronous): বার্তা পৌঁছানোর কোনো নির্দিষ্ট সময়সীমা নেই। একটি ধীরগতির বার্তা এবং একটি মৃত সার্ভারের মধ্যে কোনো পার্থক্য নির্ণয় করা যায় না।
- আংশিক সিঙ্ক্রোনাস (Partially Synchronous): সিস্টেম শুরুতে অনির্দিষ্ট আচরণ করলেও একটি নির্দিষ্ট স্থিতিশীল সময়ের ($text{GST}$) পর সিঙ্ক্রোনাস আচরণ করে।
- নোড ব্যর্থতার স্তরক্রম:
- ক্র্যাশ-স্টপ (Crash-Stop): একটি সার্ভার হঠাৎ বন্ধ হয়ে যায় এবং আর কখনো চালু হয় না।
- ক্র্যাশ-রিকভারি (Crash-Recovery): সার্ভার সাময়িক বন্ধ হয়ে আবার ডিস্কের মেমোরি নিয়ে পুনরায় সক্রিয় হয়।
- বাইজেন্টাইন ত্রুটি (Byzantine Faults): সার্ভার শুধু নষ্টই হয় না, বরং উদ্দেশ্যপ্রণোদিতভাবে মিথ্যা তথ্য বা বিভ্রান্তিকর বার্তা অন্য সার্ভারে পাঠায়।
২. ঐকমত্যের ৩টি মৌলিক শর্ত
যেকোনো কনসেনসাস অ্যালগরিদমকে তিনটি প্রধান শর্ত পূরণ করতে হয়:
- অ্যাগ্রিমেন্ট (নিরাপত্তা / Safety): কোনো দুটি সুস্থ নোড ভিন্ন সিদ্ধান্তে উপনীত হতে পারবে না।
- ভ্যালিডিটি (Validity): গৃহীত সিদ্ধান্তটি অবশ্যই নোডগুলোর প্রস্তাবিত ইনপুট থেকে আসতে হবে।
- টার্মিনেশন (লাইভনেস / Liveness): প্রতিটি সক্রিয় নোডকে অবশেষে একটি সিদ্ধান্তে পৌঁছাতে হবে।
৩. এফএলপি প্রমাণের মূল যুক্তি
এফএলপি উপপাদ্যের প্রমাণটি একটি কাল্পনিক প্রতিপক্ষ (Adversary) এবং সিস্টেমের কনফিগারেশনের ওপর ভিত্তি করে দাঁড়িয়ে আছে:
- ইউনিভ্যালেন্ট ও বাইভ্যালেন্ট স্টেট: একটি গ্লোবাল অবস্থাকে 0-ইউনিভ্যালেন্ট বলা হয় যদি ভবিষ্যতে যেকোনো ক্রমেই বার্তা পৌঁছাক না কেন, চূড়ান্ত সিদ্ধান্ত কেবল 0 হয়। অনুরূপভাবে 1-ইউনিভ্যালেন্ট অবস্থায় সিদ্ধান্ত কেবল 1 হতে পারে। আর যদি ভবিষ্যতের বার্তা প্রক্রিয়াকরণের ওপর ভিত্তি করে ফলাফল 0 বা 1 উভয়েই হওয়ার সম্ভাবনা থাকে, তবে তাকে বাইভ্যালেন্ট (Bivalent) অবস্থা বলে।
- বাইভ্যালেন্সের ফাঁদ: গবেষকরা প্রমাণ করেন যে সিস্টেমে অন্তত একটি প্রারম্ভিক অবস্থা থাকে যা বাইভ্যালেন্ট। এরপর তারা দেখান যে কোনো প্রতিকূল নেটওয়ার্কে যদি একটিমাত্র নোড ক্র্যাশ করে বা বিলম্বিত হয়, তবে চতুর শিডিউলার সবসময় এমনভাবে বার্তার ক্রম পরিবর্তন করতে পারে যাতে সিস্টেম কখনোই ইউনিভ্যালেন্ট অবস্থায় পৌঁছাতে না পারে। ফলে সিস্টেমটি অনন্তকাল বাইভ্যালেন্ট দোলাচলে আটকা পড়ে থাকে এবং সিদ্ধান্ত গ্রহণ চিরতরে স্থগিত হয়ে যায়।
৪. আধুনিক সফটওয়্যার ইঞ্জিনিয়ারিংয়ে এফএলপি-র সমাধান
বাস্তব জগতে প্যাক্সোস (Paxos), র্যাফ্ট (Raft) বা কাসান্দ্রার মতো সিস্টেম কীভাবে কাজ করে? এফএলপি এড়িয়ে যাওয়ার বাস্তব কৌশলগুলো হলো:
- র্যান্ডমাইজেশন (Randomization): কয়েন টস বা র্যান্ডম অ্যালগরিদমের মাধ্যমে ডিটারমিনিজমের শর্ত শিথিল করা হয়, যা প্রায় নিশ্চিতভাবে সীমিত সময়ে ঐকমত্যে পৌঁছে দেয়।
- ফেইলিউর ডিটেক্টর (Failure Detectors): আংশিক বিশ্বাসযোগ্য হার্টবিট ব্যবস্থার মাধ্যমে সন্দেহভাজন নোডকে সিস্টেম থেকে সাময়িক বহিষ্কার করা হয়।
- লাইভনেসের চেয়ে নিরাপত্তাকে অগ্রাধিকার: প্যাক্সোস এবং র্যাফ্ট নেটওয়ার্ক বিপর্যয়ের সময় ভুল সিদ্ধান্ত নেওয়া প্রতিহত করে (Safety বজায় রাখে), এবং নেটওয়ার্ক স্বাভাবিক না হওয়া পর্যন্ত সিদ্ধান্ত স্থগিত রাখে।