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