Un design tolerant la defecțiuni detectează, conține, maschează sau reconfigurează în jurul defecțiunilor, astfel încât operarea rămâne în limitele declarate de corectitudine, capacitate, timp și siguranță, uneori la un nivel de serviciu deliberat degradat.
Cerința trebuie să definească ce defecțiuni, combinații și durate ar trebui sistemul să tolereze. Designurile pot folosi replicare, votare, corectare de erori, căi de alimentare sau comunicații independente, implementări diverse, reconciliere de stare și degradare grațioasă, susținute de monitorizare și reparații.
Puncte esențiale
Definiți serviciul corectSpecificați funcțiile esențiale, degradarea permisă, ipotezele de defecțiune, timpul de detecție, comportamentul de recuperare și punctul în care oprirea sigură este preferabilă operării continue.
Creați independențăSeparați replicile și alimentarea, rețelele, identitățile, administrarea și locațiile de suport acolo unde modelul de amenințare o cere; luați în calcul diversitatea împotriva defectelor comune.
Protejați stareaControlați replicarea, ordonarea, cvorumul, consistența, detecția corupției și reintegrarea, astfel încât componentele redundante să nu răspândească date greșite sau să creeze acțiuni conflictuale.
Limitare importantăRedundanța singură nu este toleranță la defecțiuni. Eșecuri de mod comun, dependențe partajate, defecte de design, atacuri corelate, capacitate epuizată și detecție incorectă a eșecului pot învinge fiecare replică, în timp ce complexitatea adăugată poate introduce noi defecțiuni.