> 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/circuit-breakers.md).

# Circuit Breakers

### **সার্কিট ব্রেকার কী**

ধরুন, আপনার বাড়ির ইলেকট্রিক লাইনে হঠাৎ ওভারলোড হয়—যেমন, একসাথে ফ্রিজ, এসি, ওভেন চালানোয় অতিরিক্ত লোড পড়ে। যদি সরাসরি বিদ্যুৎ সংযোগ বন্ধ না হয়, তাহলে ওয়্যারিং গলে যেতে পারে বা আগুনও লাগতে পারে

এখানেই Circuit Breaker কাজ করে! যখন বিদ্যুৎ প্রবাহ অতিরিক্ত বেড়ে যায়, সার্কিট ব্রেকার স্বয়ংক্রিয়ভাবে সংযোগ বিচ্ছিন্ন করে। এতে সিস্টেম ধ্বংস হওয়ার আগেই সমস্যা থেমে যায়।

ঠিক একইভাবে, Software Circuit Breaker কোনো API বা External Service ধীরগতির বা ব্যর্থ হলে স্বয়ংক্রিয়ভাবে রিকোয়েস্ট ব্লক করে। এতে পুরো সিস্টেম ক্র্যাশ না করে নিরাপদ থাকে!&#x20;

ধরুন, আপনি একটি ই-কমার্স ওয়েবসাইটের মালিক, যেখানে গ্রাহকরা পেমেন্ট গেটওয়ে ব্যবহার করে পেমেন্ট করে। এখন, যদি পেমেন্ট সার্ভিস ধীর হয়ে যায় বা একদম কাজ করাই বন্ধ করে দেয়, তাহলে কী হবে?

গ্রাহকরা অপেক্ষা করবে → বিরক্ত হবে → ওয়েবসাইট ছেড়ে চলে যাবে!\
সার্ভার চাপ সামলাতে পারবে না → পুরো সিস্টেম স্লো হয়ে যাবে!

এই সমস্যার সমাধান? **সার্কিট ব্রেকার**

### **সার্কিট ব্রেকার কীভাবে কাজ করে?**

একটি সার্কিট ব্রেকার মূলত তিনটি স্টেটে কাজ করে:

1\) **Closed (স্বাভাবিক অবস্থা)**:

* সবকিছু ঠিকঠাক থাকলে রিকোয়েস্ট স্বাভাবিকভাবে সার্ভারে যায়।

2\) **Open (ত্রুটি ধরা পড়েছে, সার্ভার বাঁচাও!)**

* যদি **৩ বার ব্যর্থ হয়**, তাহলে সার্কিট ব্রেকার **রিকোয়েস্ট ব্লক করে দেবে**।
* নতুন রিকোয়েস্ট আসলে সাথে সাথে **Fail ঘোষণা করবে** (ওয়েট করতে হবে না)।
* এতে **সার্ভার অতিরিক্ত চাপের হাত থেকে বেঁচে যাবে**!

3\) **Half-Open (টেস্টিং চলছে)**

* ১০ সেকেন্ড পর সার্কিট ব্রেকার **একটু চেক করবে**।
* যদি ঠিকঠাক চলে, তবে **পুনরায় চালু** হয়ে যাবে।
* না হলে আবার **Open হয়ে যাবে**।

### **বাস্তব উদাহরণ**

এই কোডে আমরা একটি সার্কিট ব্রেকার ব্যবহার করেছি যা যদি ৩ বার Fail হয়, তবে ১০ সেকেন্ডের জন্য রিকোয়েস্ট ব্লক করে দেবে।

{% code lineNumbers="true" %}

```python
import pybreaker
import requests

# সার্কিট ব্রেকার সেটআপ (৩ বার ব্যর্থ হলে ১০ সেকেন্ড বন্ধ থাকবে)
circuit_breaker = pybreaker.CircuitBreaker(fail_max=3, reset_timeout=10)

# পেমেন্ট প্রসেসের জন্য ফাংশন
@circuit_breaker
def process_payment():
    response = requests.get("http://payment-service/pay")  # পেমেন্ট সার্ভিস কল করা
    response.raise_for_status()  # যদি সার্ভার ব্যর্থ হয়, তাহলে এক্সেপশন উঠবে
    return response.text

# কয়েকবার পেমেন্ট ট্রাই করা
for i in range(5):
    try:
        print(f"প্রচেষ্টা {i+1}: {process_payment()}")
    except pybreaker.CircuitBreakerError:
        print(f"প্রচেষ্টা {i+1}: সার্কিট ব্রেকার চালু! অনুরোধ ব্লক করা হয়েছে")
    except Exception as e:
        print(f"প্রচেষ্টা {i+1}: পেমেন্ট সার্ভিস ব্যর্থ - {e}")

```

{% endcode %}

**সার্ভারকে বাঁচায়** – Failed API-তে অহেতুক চাপ দেয় না\
**ফাস্ট রেসপন্স দেয়** – টাইম আউটের জন্য অপেক্ষা করতে হয় না\
**সিস্টেম স্টেবল রাখে** – সব সার্ভিস যেন একসাথে ক্র্যাশ না করে
