# Tolleranza ai guasti

Nell'ingegneria dell'affidabilità la tolleranza ai guasti (o fault-tolerance, dall'inglese) è la capacità di un sistema di non subire avarie (cioè interruzioni di servizio) anche in presenza di guasti. La tolleranza ai guasti è uno degli aspetti che costituiscono l'affidabilità. È importante notare che la tolleranza ai guasti non garantisce l'immunità da tutti i guasti, ma solo che i guasti per cui è stata progettata una protezione non causino fallimenti.
I controlli di protezione (che vengono effettuati a tempo di esecuzione), assieme a controlli analoghi effettuati staticamente (come a tempo di progettazione o di compilazione), sono una metodologia molto efficace per ottenere un'elevata robustezza (rapida rilevazione degli errori e loro confinamento) in un sistema. La tolleranza ai guasti può portare al peggioramento di altre prestazioni, per cui nella progettazione di un sistema è necessario trovare adeguate ottimizzazioni e compromessi.

## Descrizione
### Robustezza

La robustezza è la proprietà di quei sistemi che assicurano una rapida rilevazione degli errori e che ne consentono il confinamento.
Studi statistici hanno mostrato che almeno due errori su tre sono dovuti a richieste illegali di operazioni su oggetti, cioè proprio a quelle richieste che i controlli di protezione prevengono.

### Misurazioni della tolleranza ai guasti

Una tipica misurazione della tolleranza ai guasti è costituita dal calcolare il tempo medio che intercorre tra due fallimenti del sistema (in inglese Mean Time Between Failures, MTBF).

## Esempi di applicazioni

La tolleranza ai guasti varia per tipologia a seconda dell'aspetto al quale viene applicata e può avere tipi di implementazione molto differenti fra loro.

### Apparati elettronici

Si può andare da un semplice sistema di tolleranza ai guasti nell'alimentazione di apparati elettronici, utilizzando un gruppo di continuità o UPS: in caso di assenza della tensione di alimentazione, gli apparati continueranno a funzionare per un periodo dipendente dalla capacità del sistema di backup.
Un sistema più complesso, sempre relativo alle alimentazioni degli apparati attivi, consiste nella replicazione dell'alimentatore; se l'alimentatore principale si dovesse guastare, l'apparato continuerà a funzionare grazie ad uno o più alimentatori posti in ridondanza. La tolleranza ai guasti ovviamente corrisponderà al numero di alimentatori ridondanti utilizzati nel sistema: banalmente, se un apparato dispone di tre alimentatori e si guastano tutti contemporaneamente, l'apparato si ferma.

### Sistemi multiprocessore

Nel campo dei microprocessori, la tecnica SMP permette di utilizzare più microprocessori contemporaneamente, sfruttando la potenza di calcolo complessiva e, nel caso uno dei processori si dovesse fermare, il funzionamento passerà al/ai processore/i ancora in funzione.

### Memorizzazione in unità disco

Nella protezione dei dati, si può ricorrere a sistemi RAID, nei quali la tolleranza ai guasti è in funzione dello schema RAID adottato e dell'adozione o meno di dischi hot-spare.

## Livelli della tolleranza ai guasti

* Il metodo più semplice si chiama mirroring e consente di avere nelle unità di memoria di massa due copie identiche dello stesso disco (oppure solo di alcuni archivi particolarmente importanti e preselezionati); quando un'operazione di I/O riscontra un errore, l'elaborazione non viene interrotta potendo essa usare la copia alternativa.
* Un secondo livello di tolleranza del guasto viene realizzato con la tecnica del duplexing, che consiste nella duplicazione dell'unità di controllo dei dischi (controller) oltre che dei dischi. L'utente può continuare ad elaborare anche nel caso di un guasto al controller o al disco, e diminuiscono i rischi di interruzione.
* Il terzo livello riguarda la duplicazione dell'intero sistema, del server nel caso di reti locali e del mainframe nel caso di un sistema di grandi dimensioni.
* Ci sono a disposizione altre tecniche meno costose rispetto alla duplicazione parziale del sistema, che vengono indicate con la sigla RAID (Redundant Array of Independent Disks). Questa tecnologia consiste nel distribuire i dati su un gruppo di dischi, in modo che sia possibile ricostruire per via matematica tutti i dati eventualmente persi da uno dei dischi.