In ingegneria del software, il Circuit breaker () è 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.. 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.. Il circuit breaker può essere usato in congiunzione con altri pattern, come retry, fallback e timeout, per migliorare la resistenza ai guasti nei sistemi..
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..
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
Bibliografia
Collegamenti esterni Implementazioni
Approfondimenti
Categoria:Design pattern