Circuit breaker (design pattern)

In ingegneria del software, il Circuit breaker (lett. "interruttore di sicurezza" in italiano) è un design pattern utilizzato per migliorare la resilienza e la tolleranza ai guasti di un sistema software.

Il circuit breaker può prevenire fallimenti a cascata, in particolare nei sistemi distribuiti.[1] Nei sistemi distribuiti il circuit breaker può essere usato per monitorare la salute dei servizi e rilevare i guasti dinamicamente. A differenza dei metodi basati su limiti temporali, che possono portare a reazioni tardive agli errori o a fallimenti prematuri di richieste sane, il circuit breaker può proattivamente identificare servizi non responsivi e prevenire richieste ripetute. Questo approccio può migliorare l'esperienza utente.[2] Il circuit breaker può essere usato in congiunzione con altri pattern, come retry, fallback e timeout, per migliorare la resistenza ai guasti nei sistemi.[3]

Problemi

Secondo Marc Brooker, i circuit breaker possono travisare un guasto parziale per un guasto totale del sistema, portandolo inavvertitamente offline per intero. In particolare, i sistemi frammentati e le architetture basate sulle celle sono vulnerabili a questo problema. Uno stratagemma per mitigare il problema è fare in modo che il server indichi al client quale specifica parte del sistema è sovraccarica, e il client usi un mini circuit breaker corrispondente. Tuttavia questo sistema può risultare complesso e oneroso.[4][5]

Possibili stati di un circuit breaker

Chiuso
Stato chiuso

In condizioni normali il circuit breaker rimane nello stato "chiuso", e tutte le richieste vengono inoltrate ai servizi. Se il numero di fallimenti cresce oltre la soglia impostata, il circuit breaker si attiva e passa allo stato "aperto".

Aperto
Stato aperto

In questo stato il circuit breaker restituisce un errore immediatamente, senza coinvolgere i servizi. Il circuit breaker si porta nello stato semi-aperto dopo un certo periodo di tempo preimpostato.

Semi-aperto
Stato semi-aperto

In questo stato il circui breaker permette a un numero limitato di richieste di raggiungere i servizi. Se le richieste terminano con successo il circuit breaker torna allo stato "chiuso". Tuttavia, se le richieste continuano a fallire esso tornerà allo stato "aperto".

Note

  1. ↑ Abouahmed & Ahmed 2023.
  2. ↑ Richards 2016.
  3. ↑ Clingan & Finnigan 2022.
  4. ↑ Vitillo 2022.
  5. ↑ (EN) Marc Brooker, Will circuit breakers solve my problems?, su brooker.co.za, 16 febbraio 2022. URL consultato il 19 dicembre 2025.

Bibliografia

  • (EN) Mohamed Abouahmed e Omar Ahmed, Machine Learning in Microservices. Productionizing Microservices Architecture for Machine Learning Solutions, Packt Publishing, 2023, ISBN 9781804612149.
  • (EN) Mark Richards, Microservices AntiPatterns and Pitfalls, O'Reilly, 2016, ISBN 9781492042716.
  • (EN) Ken Finnigan e John Clingan, Kubernetes Native Microservices with Quarkus and MicroProfile, Manning, 2022, ISBN 9781638357155.
  • (EN) Roberto Vitillo, Understanding Distributed Systems, 2022, ISBN 9781838430214.

Collegamenti esterni

Implementazioni
Approfondimenti