> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/fault-tolerance.md).

# Fault Tolerance

ধরুন, আপনি একটি বড় শহরে বাস করেন এবং প্রতিদিন অফিসে যান। একদিন রাস্তায় গিয়ে দেখলেন একটি ট্রাফিক সিগনাল নষ্ট হয়ে গেছে। সবাই গাড়ি চালাচ্ছে যেখানে সেখানে, এবং সড়কে বিশৃঙ্খলা সৃষ্টি হয়েছে। এমন অবস্থায় আপনি ভাবছেন, যদি সিগনালটি কাজ করত, তাহলে সবাই সঠিকভাবে ট্রাফিক অনুসরণ করতে পারত, এবং রাস্তায় কোনো দুর্ঘটনা হতো না।

এটা ঠিক যেমন আমাদের সিস্টেমের ক্ষেত্রে ঘটে। কখনো কখনো কোনো একটা কম্পোনেন্ট, যেমন সার্ভার বা সফটওয়্যার সিস্টেম কাজ বন্ধ করে দেয়, এবং পুরো সিস্টেম হালকা বা গুরুতর সমস্যার মুখোমুখি হয়। এই সমস্যা সমাধানের জন্যই **Fault Tolerance** বা ত্রুটি সহনশীলতা প্রয়োজন।

### Fault Tolerance কী?

Fault Tolerance এমন একটি ডিজাইন পদ্ধতি যা সিস্টেমকে ত্রুটির মধ্যেও সচল রাখতে সহায়ক। অর্থাৎ, যখন কোনো সিস্টেমের অংশে সমস্যা দেখা দেয়, তখন পুরো সিস্টেমটি যেন কাজ করে থাকে, এমন উপায় বের করা হয়। এটি এমন একটি পদ্ধতি, যা কোনো কম্পোনেন্টে ত্রুটি ঘটলেও, সিস্টেমটি চালু থাকতে পারে এবং ব্যবহারকারীর জন্য সেবা প্রদান করতে পারে।

### কেন Fault Tolerance দরকার?

আমরা যখন কোনো বড় সিস্টেম ডিজাইন করি, যেমন ব্যাংকিং সিস্টেম, ক্লাউড সার্ভিস, বা ট্রান্সপোর্টেশন সিস্টেম, তখন এর মধ্যে কোনো এক উপাদান বা সার্ভিস যদি বন্ধ হয়ে যায়, তবে পুরো সিস্টেমটি ব্যাহত হতে পারে। উদাহরণস্বরূপ, যদি কোনো ডাটাবেস সার্ভার ক্র্যাশ হয়ে যায়, তবে ব্যবহারকারীরা সেবাটি নিতে পারবেন না। তাই সিস্টেমের সার্বিক স্থিতিশীলতা এবং নির্ভরযোগ্যতা বজায় রাখতে Fault Tolerance অপরিহার্য।

### Fault Tolerance এর বিভিন্ন টেকনিক:

1. **Redundancy :** সিস্টেমে অতিরিক্ত উপাদান যোগ করা যাতে কোনো একটি উপাদান ব্যর্থ হলে আরেকটি উপাদান তা প্রতিস্থাপন করতে পারে। যেমন, একাধিক সার্ভার ব্যবহার করা যা পরস্পরকে সমর্থন করে।
2. **Replication :** সিস্টেমের তথ্য বা ডেটা একাধিক জায়গায় কপি করা হয়। এতে যদি এক জায়গায় কোনো সমস্যা হয়, তবে অন্য জায়গা থেকে ডেটা পাওয়া যাবে। যেমন, ডেটাবেসের রেপ্লিকেশন।
3. **Graceful Degradation:** সিস্টেম যদি কোন একটি ফিচার বা উপাদান হারায়, তবে অন্য কোন ফিচারের মাধ্যমে সিস্টেমটি একসাথে কাজ করতে থাকে। যেমন, ওয়েবসাইটে যদি কোনো গ্রাফিক্স লোড না হয়, তবে অন্যান্য বিষয়গুলো ঠিকভাবে প্রদর্শিত হয়।
4. **Failover :** যখন একটি সিস্টেম বা সার্ভিস ব্যর্থ হয়, তখন তা স্বয়ংক্রিয়ভাবে অন্য একটি সিস্টেম বা সার্ভিসে চলে যায় যাতে কাজ চালু রাখা যায়।
5. **Error Detection and Recovery :** সিস্টেমের মধ্যে ত্রুটি সনাক্ত করে তার দ্রুত সমাধান করা। এর জন্য সাধারণত মনিটরিং টুলস এবং অ্যালগরিদম ব্যবহৃত হয়, যা ত্রুটি ঘটলে স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করতে সাহায্য করে।

Fault Tolerance ডিজাইন প্রক্রিয়ায় একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি শুধু সিস্টেমের নির্ভরযোগ্যতা বাড়ায় না, বরং ব্যবহারকারীদের জন্য একটি নিরাপদ এবং সুসংগঠিত পরিবেশ তৈরি করে। তাই, কোনো সিস্টেম ডিজাইন করার সময় এই ধারণাটিকে একেবারে উপেক্ষা করা উচিত নয়।
