Single point of failure & Cascading failures
ডিস্ট্রিবিউটেড সিস্টেম ডিজাইনের মূল লক্ষ্য হলো সিস্টেমকে টেকসই বা 'Fault Tolerant' করা। এর জন্য দুটি বড় বিপদ সম্পর্কে আমাদের জানতে হবে।
1. Single Point of Failure (SPOF)
সিস্টেমে এমন কোনো একটি পার্ট বা কম্পোনেন্ট যা নষ্ট হয়ে গেলে পুরো সিস্টেম অচল হয়ে যায়, তাকেই Single Point of Failure বলা হয়।
উদাহরণ:
- আপনার যদি একটি মাত্র ডাটাবেস সার্ভার থাকে এবং সেটি ক্র্যাশ করে, তবে পুরো অ্যাপ বন্ধ হয়ে যাবে।
- যদি একটি মাত্র লোড ব্যালেন্সার থাকে এবং সেটি ডাউন হয়, তবে কোনো ইউজার রিকোয়েস্ট সার্ভারে পৌঁছাবে না।
কিভাবে এটি সমাধান করবেন?
- Redundancy: প্রতিটি কম্পোনেন্টের ব্যাকআপ বা ডুপ্লিকেট রাখা।
- Replication: ডাটাবেস রেপ্লিকেশন ব্যবহার করা।
- Failover Mechanism: প্রাইমারি সার্ভার ডাউন হলে যেন অটোমেটিক সেকেন্ডারি সার্ভার কাজ শুরু করে।
2. Cascading Failures
এটি একটি চেইন রিঅ্যাকশন। যখন একটি সার্ভারের সমস্যা বা ব্যর্থতা পুরো সিস্টেমের অন্যান্য সার্ভারগুলোতে একের পর এক ছড়িয়ে পড়ে, তাকে Cascading Failure বলে।
কিভাবে ঘটে?
ধরা যাক আমাদের ৩টি সার্ভার আছে। ১টি সার্ভার ডাউন হলো। এখন বাকি ২টি সার্ভারের ওপর অতিরিক্ত লোড পড়বে। এই অতিরিক্ত চাপে যদি দ্বিতীয় সার্ভারটিও ডাউন হয়, তবে ৩য় সার্ভারটি একাই সব লোড নিতে গিয়ে সাথে সাথে ক্র্যাশ করবে। এভাবেই পুরো সিস্টেম বন্ধ হয়ে যায়।
কিভাবে এটি এড়িয়ে চলবেন?
- Circuit Breaker Pattern: যদি দেখা যায় কোনো একটি সার্ভিস বারবার ফেইল করছে, তবে তাকে সাময়িকভাবে মেইন সিস্টেম থেকে আলাদা করে দেওয়া (Disconnect) যাতে অন্য সার্ভারগুলো বেঁচে যায়।
- Rate Limiting: সার্ভার যাতে অতিরিক্ত রিকোয়েস্টে ক্র্যাশ না করে সেজন্য রিকোয়েস্ট লিমিট করা।
- Timeouts: রিকোয়েস্ট ফেইল করলে খুব বেশি সময় অপেক্ষা না করে সাথে সাথে সেশন ক্লোজ করা।
- Graceful Degradation: সিস্টেমের মেইন ফিচার সচল রেখে সল্প গুরুত্বপূর্ণ ফিচারগুলো বন্ধ করে দেওয়া (যেমন: স্ট্যাটিক পেজ দেখানো)।
WARNING
হাই-স্কেল সিস্টেমে Cascading Failure রোধ করা সবচেয়ে কঠিন কাজ। তাই আর্কিটেকচার ডিজাইনের সময় সবসময় 'সার্কিট ব্রেকার' এবং 'রেডান্ডান্সি' রাখা আবশ্যিক।