Disjoncteurs et dégradation progressive
Apprenez comment les disjoncteurs empêchent les défaillances en cascade et comment la dégradation progressive maintient un système utile même lorsque ses dépendances échouent.
Disjoncteurs et dégradation progressive est une leçon System Design Basics for Backend Developers gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage System Design Basics for Backend Developers, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours System Design Basics for Backend Developers comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
The Cascading Failure Problem
In a system of dependent services, one slow service can drag down everything that calls it. Threads pile up waiting, queues fill, and the failure cascades across the whole system.
High availability means containing failures, not just preventing them.
What a Circuit Breaker Does
A circuit breaker wraps calls to a dependency. When failures cross a threshold, it opens and fails fast instead of waiting on a dead service.
- Stops wasting threads on doomed calls
- Gives the failing service time to recover
The Three States
A circuit breaker has three states:
- Closed: calls flow normally, failures are counted
- Open: calls fail immediately without hitting the dependency
- Half-open: a few trial calls test whether the dependency recovered
CLOSED --(too many failures)--> OPEN
OPEN --(timeout elapsed)--> HALF_OPEN
HALF_OPEN --(trial succeeds)--> CLOSED
HALF_OPEN --(trial fails)--> OPENA Simple Breaker in Code
Here is the core idea: count failures, trip when a threshold is reached, and refuse calls while open.
class Breaker:
def __init__(self, limit):
self.fails = 0
self.limit = limit
self.open = False
def call(self, ok):
if self.open:
return 'rejected'
if ok:
self.fails = 0
return 'success'
self.fails += 1
if self.fails >= self.limit:
self.open = True
return 'failure'
b = Breaker(3)
for ok in [False, False, False, True]:
print(b.call(ok))Timeouts Are Essential
A breaker only helps if calls have timeouts. Without a timeout, a hung dependency holds a thread forever and failures are never counted. Always set aggressive, explicit timeouts on remote calls.
Retries and Backoff
Retries can help with transient errors but can also amplify an overload. Use exponential backoff with jitter and cap the retry count. Combine with a circuit breaker so retries stop entirely when the circuit is open.
import random
delay = 1
for attempt in range(4):
wait = delay + random.uniform(0, delay)
print('attempt', attempt, 'wait', round(wait, 2))
delay *= 2Graceful Degradation
Graceful degradation means the system still does something useful when a dependency is down, instead of returning an error.
- Serve stale cached data
- Hide a non-critical feature
- Return a sensible default
Fallbacks
When the breaker is open, route to a fallback. For a product page, if the recommendations service is down, show a generic best-sellers list instead of failing the whole page.
def get_recommendations(breaker):
if breaker.open:
return ['bestseller-1', 'bestseller-2']
return ['personalized-1', 'personalized-2']Bulkheads
The bulkhead pattern isolates resources so one failing dependency cannot consume all threads or connections. Give each downstream dependency its own bounded pool — like watertight compartments in a ship.
Load Shedding
Under extreme load, it is better to reject some requests quickly than to slow down for everyone. Load shedding drops low-priority traffic to protect critical paths and keep latency bounded.
Putting It Together
Resilient services layer these patterns: tight timeouts, circuit breakers, bulkheads to isolate, fallbacks for degradation, and load shedding under pressure. Together they turn a potential outage into a minor, contained blip.
Quick Check
Test your understanding of circuit breakers.
Recap
You learned to contain failures for high availability:
- Circuit breakers fail fast and cycle through closed, open, and half-open
- Timeouts and capped backoff retries prevent overload amplification
- Graceful degradation and fallbacks keep the system useful
- Bulkheads and load shedding isolate and protect critical paths
Apprends System Design Basics for Backend Developers avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 12
- Leçons
- 48
Questions Fréquemment Posées
La leçon « Disjoncteurs et dégradation progressive » est-elle gratuite ?
Oui — le texte complet de « Disjoncteurs et dégradation progressive » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours System Design Basics for Backend Developers, passe à CoddyKit PRO. Le cours System Design Basics for Backend Developers comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Disjoncteurs et dégradation progressive » ?
Apprenez comment les disjoncteurs empêchent les défaillances en cascade et comment la dégradation progressive maintient un système utile même lorsque ses dépendances échouent. Tu pratiques System Design Basics for Backend Developers avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer System Design Basics for Backend Developers ?
Aucune expérience préalable n'est requise. System Design Basics for Backend Developers sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Disjoncteurs et dégradation progressive » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon System Design Basics for Backend Developers ?
Oui. Chaque leçon System Design Basics for Backend Developers inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Redondance et mécanismes de basculement
- Planification de la reprise après sinistre
- Supervision, alertes et journalisation
- Disjoncteurs et dégradation progressive