Architecture systèmeDéveloppeur Backend, Architecte Système

Qu'est-ce que le Circuit Breaker au niveau architectural, quand et pourquoi l'appliquer ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Circuit Breaker — c'est un patron architectural pour prévenir les erreurs en cascade et la dégradation des systèmes distribués. Son principe : un composant responsable des appels à un système externe vérifie le succès des opérations. Si le nombre d'essais infructueux devient trop élevé, le Circuit Breaker se "déclenche" automatiquement et les appels suivants échouent, tant que le système ne commence pas à se rétablir.

Exemple : si le microservice Auth ne répond plus, le service Order, utilisant le Circuit Breaker, n'envoie temporairement pas de requêtes, mais renvoie immédiatement une erreur, évitant une forte charge sur le système dépendant.

Exemple de code en Python (en utilisant la bibliothèque pybreaker) :

import pybreaker import requests breaker = pybreaker.CircuitBreaker(fail_max=3, reset_timeout=30) @breaker def call_service(): return requests.get("https://api.service.com/data") try: response = call_service() except pybreaker.CircuitBreakerError: print("Service temporairement indisponible. Veuillez réessayer plus tard.")

Caractéristiques clés :

  • Limite la propagation des échecs et accélère la récupération du système.
  • Permet de dégrader gracieusement : avertir les utilisateurs au lieu de faire tomber l'application.
  • Pertinent pour les intégrations avec des systèmes peu fiables ou surchargés.

Questions pièges.

Le Circuit Breaker est-il la même chose que Retry ?

Non. Retry — répète les opérations échouées, le Circuit Breaker interrompt la chaîne des appels lors d'un grand nombre d'échecs, permettant au système de se reposer. Ces patrons sont le plus souvent combinés : retry à l'intérieur, circuit breaker à l'extérieur.

Faut-il implémenter un Circuit Breaker entre ses propres microservices qui se déploient en même temps ?

Oui, si les services peuvent rencontrer des pannes de résistance ou des échecs de réseau. Personne n'est à l'abri des erreurs de configuration ou de charge, même vos microservices.

Le Circuit Breaker est-il nécessaire uniquement pour des intégrations API externes ?

Non, ce patron peut être appliqué à toute interaction peu fiable, y compris à l'intérieur de sa propre infrastructure : bases de données, caches, files d'attente de messages.