> 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/graceful-degradation.md).

# Graceful Degradation

### Graceful Degradation কী

ধরো, তুমি React (Frontend), Django (Backend) আর PostgreSQL (Database) দিয়ে একটা E-commerce Website ডেভেলপ করছো।

**Problem:** হঠাৎ করে Database slow হয়ে গেছে, বা হয়তো সাময়িকভাবে ডাউন!

* **Without Graceful Degradation:** পুরো ওয়েবসাইট ক্র্যাশ করবে, কেউ কিছুই দেখতে পারবে না
* **With Graceful Degradation:**

1. Database ঠিকমতো কাজ না করলেও Cache থেকে আগের Product Data দেখাবে।
2. User প্রোডাক্ট ব্রাউজ করতে পারবে, শুধু stock status একটু পুরোনো দেখাবে।
3. Checkout কাজ না করলে একটা সুন্দর Message দেখাবে:\
   *Checkout is currently unavailable, please try again later*
4. Backend Automated Retry করবে database ঠিক হলে checkout চালু করার জন্য।

Graceful Degradation মানে হলো একটা সিস্টেম যখন পুরোপুরি ভেঙে পড়ার পরিবর্তে সীমিত ফিচার চালু রাখে, যাতে ইউজাররা কমপক্ষে মূল কাজগুলো করতে পারে।

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

***

### **When to Use**

* **হাই ট্রাফিক (High Traffic)** – ব্ল্যাক ফ্রাইডের মতো বিশাল অফারে যখন ট্রাফিক বেড়ে যায়।
* **Microservice Failure** – যখন কোনো সার্ভিস ঠিকমতো কাজ করছে না, তখন Limited Mode-এ চালানো।
* **Third-Party API Down** – যেমন **Payment Gateway** ডাউন থাকলে Checkout ব্লক না করে **Cart Save** করে রাখা।
* **ইন্টারনেট সংযোগ খারাপ** – ইউজারের ইন্টারনেট স্লো হলে, **Cache থেকে ডাটা লোড** করা।
* **কঠিন Calculation বা AI Processing** – যদি সার্ভার Slow হয়, তাহলে আপাতত Approximate Result দেখানো।

***

### **How to Use**

**Caching ব্যবহার করো** – Redis বা localStorage-এ ডাটা সংরক্ষণ করে রাখো।\
**Feature Downgrading করো** – অপ্রয়োজনীয় ফিচার বন্ধ করে রাখো।\
**Fallback Content দেখাও** – যদি API ডাউন থাকে, তাহলে default message/image দেখাও।\
**Retry Logic & Queue ব্যবহার করো** – যেমন, পেমেন্ট ফেইল হলে, ব্যাকগ্রাউন্ডে অটোমেটিক রি-ট্রাই করা।\
**Circuit Breaker ব্যবহার করো** – যদি কোনো সার্ভিস একাধিকবার ব্যর্থ হয়, তাহলে কিছুক্ষণ রিকোয়েস্ট বন্ধ রাখো।

***

### **Benefits of Graceful Degradation**

✔️ **User Experience ভালো থাকবে** – ইউজার অন্তত কিছু করতে পারবে, পুরো সাইট বন্ধ হবে না।\
✔️ **পুরো সিস্টেম ক্র্যাশ হবে না** – ব্যাকএন্ড সমস্যা হলেও সিস্টেম চলতে থাকবে।\
✔️ **ব্যাকএন্ড ভালোভাবে হ্যান্ডেল করবে** – Error Handling আরও স্মার্ট হবে।\
✔️ **পারফরম্যান্স অপ্টিমাইজড হবে** – কম রিসোর্স ব্যবহার করে Efficient পারফরম্যান্স দেবে।

***

Graceful Degradation মানে তোমার সিস্টেম **All or Nothing** মডেলে কাজ করবে না, বরং Best Effort দেবে\
এই মেথড ব্যবহার করলে সাইট ধীরগতিতে হলেও চলতে থাকবে, ইউজার পুরোপুরি ব্লক হবে না। Caching, Feature Downgrading, Fallback Content আর Retry Logic মিলে তোমার সিস্টেমকে আরও রিলায়েবল বানাবে
