Tecniche di tolleranza ai guasti in un sistema informatico
La tolleranza ai guasti (fault tolerance) è un aspetto cruciale nell’ingegneria del software, soprattutto per sistemi complessi e critici. Inizialmente, le tecniche di tolleranza ai guasti si concentravano a livello hardware, ma con l’aumentare del ruolo del software nei sistemi, è diventata evidente la necessità di meccanismi di affidabilità anche a questo livello.
Differenze tra tolleranza ai guasti hardware e software:
- Natura dei guasti: I guasti hardware sono spesso causati da difetti fisici o malfunzionamenti dei componenti, mentre i guasti software derivano da errori di programmazione, logica o dati errati.
- Approccio alla tolleranza: Le tecniche hardware si basano su ridondanza fisica (componenti duplicati), isolamento e rilevamento dei guasti. Le tecniche software, invece, richiedono ridondanza logica (moduli software ridondanti), diversificazione del software e meccanismi di voto per la gestione degli errori.
Tipi di tecniche di tolleranza ai guasti software:
1. Tecniche di rilevamento:
- Rilevamento degli errori: Identificano gli errori tramite controlli di integrità, asserzioni di programmazione o monitoraggio dello stato del sistema.
- Gestione delle eccezioni: Gestiscono gli errori in modo controllato, propagandoli a livelli superiori o avviando procedure di ripristino.
2. Tecniche strutturate:
- Ridondanza del software: Impiegano moduli software ridondanti per eseguire la stessa funzione, con meccanismi di voto per selezionare il risultato corretto.
- Ripristino dello stato: Salvano lo stato del sistema a intervalli regolari e lo utilizzano per ripristinare il sistema in caso di errore.
- Mascheramento degli errori: Nascondono gli errori all’utente o al sistema, continuando l’esecuzione con un impatto minimo.
Classificazione delle tecniche strutturate:
a) Versioni multiple del programma:
- Recovery Blocks: Divide il programma in blocchi ridondanti e utilizza il voto per selezionare il risultato corretto.
- N-Version Programming: Esegue versioni indipendenti del programma e utilizza il voto per l’output finale.
- Distributed Recovery Blocks: Distribuisce i blocchi di ripristino su più nodi per aumentare la tolleranza ai guasti distribuiti.
b) Rappresentazioni multiple dei dati:
- Retry Blocks: Memorizza copie ridondanti dei dati e li rilegge in caso di errore di lettura.
- N-Copy Programming: Esegue il programma con copie multiple dei dati e utilizza il voto per il risultato finale.
c) Esecuzione ripetuta in momenti diversi:
- Ripetizione temporale: Esegue il programma in momenti diversi per sfruttare i guasti transitori.
d) Riesecuzione in un ambiente diverso:
- Ringiovanimento: Riesegue il programma in un ambiente diverso (ad esempio, con uno stato del sistema diverso) per ridurre la probabilità di guasti.
Scelta della tecnica di tolleranza ai guasti:
La scelta della tecnica adatta dipende da diversi fattori, tra cui:
- Tipologia di sistema: Sistemi real-time, critici o distribuiti richiedono diverse tecniche.
- Requisiti di affidabilità: Il livello di affidabilità desiderato influenza la complessità della tecnica.
- Risorse disponibili: Costi, tempo e risorse hardware e software influenzano la scelta.
Conclusione:
La tolleranza ai guasti nel software è un’area complessa e in continua evoluzione. La scelta e l’implementazione di tecniche adeguate sono cruciali per garantire l’affidabilità, la disponibilità e la sicurezza dei sistemi software, soprattutto in contesti critici e complessi.