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

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

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

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
- ↑ Abouahmed & Ahmed 2023.
- ↑ Richards 2016.
- ↑ Clingan & Finnigan 2022.
- ↑ Vitillo 2022.
- ↑ (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
- (EN) PHP Circuit Breaker - initial zend framework proposal, su artur.ejsmont.org (archiviato dall'url originale il 25 giugno 2010).
- Polly, su nuget.org.
- (EN) Alexandr Nikitin, CircuitBreaker.Net, su github.com.
- (EN) Daniel Martins, pybreaker, su pypi.org.
- (EN) C# – Retry Pattern with Polly, su code.4noobz.net.
- Approfondimenti
- (EN) Gregor Roth, Stability patterns applied in a RESTful architecture, su infoworld.com, 2014.
- (EN) Martin Fowler, Circuit Breaker, su martinfowler.com, 2014.
- (EN) Anders Lybeckers, Automatic Retry and Circuit Breaker made easy, su lybecker.com, 2013.