# सर्किट ब्रेकर और रिट्राई — System Design: Architecture, Scale और Trade-offs

Source: https://www.skillbyai.com/hi/system-design/sd-circuit-breaker

> Circuit breakers, jitter के साथ exponential backoff, bulkheads और graceful degradation से cascading failures रोकें।

## कैस्केडिंग विफलता की समस्या

जब कोई डाउनस्ट्रीम सेवा धीमी हो जाती है, कॉलर प्रतीक्षारत थ्रेड/कनेक्शन जमा करते हैं, जिससे वे भी धीमे हो जाते हैं — विफलता ऊपर की ओर फैलती है और पूरा सिस्टम गिरा सकती है।

## आपके घर का सर्किट ब्रेकर

बिजली के ब्रेकर की तरह, **सर्किट ब्रेकर** पैटर्न बार-बार विफलता के बाद **ओपन** हो जाता है — यह विफल सेवा को कॉल करना तुरंत बंद कर देता है (लटकते टाइमआउट के बजाय तेज़ विफलता), प्रतीक्षा करता है, फिर दोबारा बंद होने से पहले कुछ टेस्ट कॉल (**हाफ़-ओपन**) आज़माता है।

## बैकऑफ़ के साथ रिट्राई

अंधाधुंध तुरंत रिट्राई किसी अतिभारित सेवा को और बदतर बनाती है। घातांकीय रूप से बैकऑफ़ करें और जिटर जोड़ें ताकि सभी रिट्राई एक साथ न पहुँचें।

```text
delay = base * 2^attempt + random_jitter
if attempt > max_attempts: give up, fallback
else: sleep(delay); retry
```

Output:

```
Prevents retry storms from making an outage worse
```

## बल्कहेड्स और ग्रेसफुल डिग्रेडेशन

**बल्कहेड्स** हर डिपेंडेंसी को अपना थ्रेड पूल/कनेक्शन सीमा देते हैं ताकि एक धीमी डिपेंडेंसी बाकी की रिक्वेस्ट न भूखी रखे — जहाज़ के जलरोधक कक्षों की तरह। जब कोई गैर-महत्वपूर्ण डिपेंडेंसी डाउन हो, तो सुंदरता से घटें: पूरा पेज विफल करने के बजाय कैश्ड सिफारिशें दिखाएँ।
