# Tolérance aux pannes

La tolérance aux pannes (ou « insensibilité aux pannes ») désigne une méthode de conception permettant à un système de continuer à fonctionner, éventuellement de manière réduite (on dit aussi en « mode dégradé »), au lieu de tomber complètement en panne, lorsque l'un de ses composants ne fonctionne plus correctement.
L'expression est employée couramment pour les systèmes informatiques étudiés de façon à rester plus ou moins opérationnels en cas de panne partielle, c'est-à-dire éventuellement avec une réduction du débit ou une augmentation du temps de réponse. En d'autres termes, le système ne s'arrête pas de fonctionner, qu'il y ait défaillance matérielle ou défaillance logicielle.
Un exemple en dehors de l'informatique est celui du véhicule à moteur conçu pour être toujours en état de rouler même si l'un de ses pneus est crevé.

## Critères de tolérance aux pannes

Aucune machine, même en électronique et en informatique, n'est fiable à 100 %, ni inusable. Le fabricant, ou bien un laboratoire d'essais indépendant, définit, après des tests traduisant une utilisation plus ou moins lourde, un critère de tolérance aux pannes de la machine.
Ce critère s'exprime soit en nombre moyen d'heures entre pannes (en anglais MTBF, ou mean time between failures), soit en nombre d'heures de fonctionnement avant la fin de vie de la machine. On lui associe en général un autre paramètre, le MTTR (mean time to repair), le temps moyen jusqu'à la réparation. La combinaison des deux permet d'établir le taux de disponibilité prévisible.
La disponibilité correspond à ${\frac {MTBF}{MTBF+MTTR}}$.

## Degrés de gravité des défaillances

* panne franche, ou arrêt sur défaillance (en anglais fail stop) : soit le système fonctionne normalement (les résultats sont corrects), soit il ne fait rien. Il s'agit du type de panne le plus simple ;
* panne par omission ou panne transitoire : des messages sont perdus en entrée ou en sortie ou les deux. Elle est considérée comme panne temporelle de durée infinie ;
* panne temporelle : le temps de réponse du système dépasse les exigences des spécifications ;
* panne byzantine : le système donne des résultats aléatoires.

## Classification de la disponibilité

La classification des systèmes en matière de disponibilité conduit communément à 7 classes, de la classe non prise en compte (système disponible 90 % du temps, et donc indisponible plus d'un mois par an) à la classe ultra disponible (disponible 99,99999 % du temps et donc indisponible seulement 3 secondes par an) : ces différentes classes correspondent au nombre de 9 dans le pourcentage de temps durant lequel les systèmes de la classe sont disponibles.
| Type | Indisponibilité (en minutes par an) | Pourcentage disponibilité | Classe |
| non géré | 50 000 (34 jours, 17 heures et 20 min) | 90 % | 1 |
| géré | 5 000 (3 jours, 11 heures et 20 min) | 99 % | 2 |
| bien géré | 500 (8 heures 20 minutes) | 99,9 % | 3 |
| tolérance fautive | 50 (un peu moins d'une heure) | 99,99 % | 4 |
| haute disponibilité | 5 minutes | 99,999 % | 5 |
| très haute disponibilité | 0,5 (30 secondes) | 99,9999 % | 6 |
| très grande haute disponibilité | 0,05 (3 secondes) | 99,99999 % | 7 |
N.B. : Une année dure 8 760 heures, soit 525 600 minutes.

## Les méthodes

* Les composants tolérants aux pannes. Si chaque composant, à son tour, peut continuer à fonctionner quand un de ses sous-composants tombe en panne, le système tout entier pourra continuer à fonctionner. Certaines voitures ont des pneus de roulage à plat ou anti-crevaison (en anglais run flat tires), qui contiennent de la gomme solide à l'intérieur pour leur permettre de continuer à rouler même lorsque la chambre à air est crevée. S'ils ne peuvent être utilisés que pendant une durée limitée et à vitesse réduite, ils constituent néanmoins une amélioration considérable par rapport aux pneus traditionnels.
* La redondance. Cela signifie avoir une sauvegarde des composants qui prend automatiquement la relève dès qu'un composant tombe en panne. Par exemple, les gros poids-lourd peuvent perdre un pneu sans grande conséquence. Ils ont tellement de pneus qu'aucun n'est d'une importance vitale (à l'exception des pneus avant, qui sont utilisés pour la direction).

## Désavantages

Les avantages d'un système insensible aux pannes sont évidents, mais qu'en est-il des désavantages ?
* Interférence avec la détection de panne. Pour conserver l'exemple de la voiture capable de rouler malgré un pneu crevé, un conducteur peut ne pas être en mesure de savoir que sa roue, équipée un système tolérant aux pannes, vient de crever. C'est souvent pris en charge par un système séparé de détection automatique de pannes. Dans le cas du pneu, un détecteur surveille la perte de pression d'air et avertit le conducteur. L'autre terme de l'alternative est la détection manuelle de pannes, en allant inspecter manuellement tous les pneus à chaque arrêt.
* Réduction de priorité de la correction de pannes. Même si le conducteur est au courant de la panne, avoir un système insensible aux pannes revient à réduire la nécessité de la réparer. Si la panne n'est pas réparée, cela finira par entraîner une défaillance du système, lorsque le composant tolérant aux pannes tombe en panne complètement ou lorsque tous les composants redondants ont également cessé de fonctionner.
* Difficulté du test Pour certains systèmes de tolérance aux pannes comme les réacteurs nucléaires, il n'y a pas de moyen facile de vérifier que les composants de sauvegarde sont opérationnels. L'exemple le plus connu est la catastrophe de Tchernobyl, où le système de rafraîchissement de secours fut testé en désactivant les systèmes primaire et secondaire. Le système de secours ne fonctionna pas, provoquant la fusion du cœur et l'échappement du nuage radioactif.
* Coût. Les composants insensibles aux pannes et les composants redondants ont tendance à accroître les coûts. Cela peut être un coût purement économique ou également inclure d'autres paramètres comme le poids. Les vols spatiaux habités, par exemple, ont tellement de systèmes redondants et de composants tolérants aux pannes que leur poids s'en trouve considérablement accru par rapport aux systèmes non habités, qui n'ont pas besoin du même niveau de sécurité.

## Quand utiliser un système de tolérance aux pannes ?

En règle générale, il n'est pas question de concevoir un système dont chaque composant est insensible aux pannes. Pour déterminer lequel des composants doit être tolérant aux pannes, on peut se poser les questions suivantes :
* Le composant est-il vraiment d'une importance cruciale ? Dans une voiture, la radio n'est pas d'une importance vitale, donc ce composant a moins besoin de tolérance aux pannes.
* Quelle est la probabilité pour que le composant tombe en panne ? Certains composants, comme l'arbre moteur d'une voiture, ne sont pas susceptibles de tomber en panne, et donc n'ont pas besoin d'être insensibles aux pannes.
* Combien coûte la conception d'un système de tolérance aux pannes ? La solution d'embarquer un deuxième moteur de voiture, par exemple, coûterait trop cher et entraînerait un poids et un encombrement trop grands pour être envisagée.
Un exemple de composants qui répond à tous les tests est le système d'immobilisation des passagers.
On ne pense pas normalement au système premier d'immobilisation des passagers qu'est la gravité. Si la voiture fait des tonneaux ou est sévèrement freinée à plusieurs g, cette méthode première d'immobilisation peut ne pas fonctionner. Immobiliser les passagers pendant un tel accident est vital pour leur sécurité, on répond donc au premier test.
Les accidents qui provoquent l'éjection des passagers étaient monnaie courante avant l'apparition des ceintures de sécurité, on répond donc au second test.
Un système redondant de blocage des passagers comme les ceintures de sécurité est d'un coût peu élevé et d'un poids et d'un encombrement très faibles, on répond donc au troisième test.
De ce fait, ajouter des ceintures de sécurité à toutes les voitures est une excellente idée. Des systèmes supplémentaires d'immobilisation des passagers comme le coussin gonflable de sécurité (en anglais airbag) sont plus chers et répondent à ce test avec une marge moindre. C'est la raison pour laquelle les voitures bon marché n'en ont pas autant que les autres.

## Exemples de tolérance aux pannes

La tolérance aux pannes matérielles peut parfois nécessiter que les pièces défaillantes soient retirées puis remplacées par de nouvelles pièces pendant que le système reste opérationnel. Un tel système à simple redondance est dit « à tolérance simple » (en anglais single point tolerant) et représente la grande majorité des systèmes tolérants aux pannes. Dans de tels systèmes le taux moyen d'échecs entre les pannes doit être suffisamment élevé pour que les administrateurs aient le temps de réparer l'ancien avant que la sauvegarde ne tombe en panne à son tour. Plus la durée entre les pannes est longue, et plus c'est facile, mais ce n'est pas indispensable dans un système de tolérance aux pannes.
L'insensibilité aux pannes fonctionne particulièrement bien dans les systèmes informatiques. Ainsi, la société Tandem Computers fait appel à des machines « à tolérance simple » pour créer ses systèmes NonStop dont le temps de bon fonctionnement (temps écoulé depuis le dernier démarrage) (en anglais uptime) se mesure en dizaines d'années. La société Netflix a de son côté mis en place les Chaos Monkey, un programme qui choisit un serveur au hasard et le neutralise pendant ses heures habituelles d’activité pour tester en continu la résilience de son système.

## Différence entre système tolérant aux pannes et système ayant peu de défaillances

Il y a une différence entre les systèmes à tolérance de pannes et les systèmes qui ont rarement des défaillances. Par exemple, les commutateurs crossbar de la société Western Electric avaient un taux de défaillance de deux heures sur quarante ans, et étaient donc hautement résistants aux pannes. Mais comme ils s'arrêtaient quand même lorsqu'une panne se produisait, ils n'étaient donc pas véritablement insensibles aux pannes.

## Fiabilité de fonctionnement

La fiabilité de fonctionnement (en anglais dependability) est la possibilité de se fier aux services fournis. Elle dépend de la fiabilité de fonctionnement des composants utilisés.

## Origine des pannes

L'origine des erreurs à prendre en considération peut varier :
* erreurs de conception, de programmation ou de saisie ;
* accidents dus à l'environnement ;
* malveillances intentionnelles.

## État d'erreur
### État d'erreur interne

Une erreur interne, provoquée par les circonstances précédentes, reste interne tant qu'elle n'a pas eu de conséquences sur le fonctionnement externe du système. Cette erreur peut rester interne longtemps (latence de la faute) mais conduit à court ou long terme à un état d'erreur externe par une défaillance ou panne.

### État d'erreur externe

L'état d'erreur externe se manifeste par une défaillance, une panne au niveau du service rendu. Le système est en panne si, à la suite de l'un des phénomènes précédents, il ne respecte pas l'une de ses spécifications. En général, seuls sont visibles les états d'erreurs externes : comment repérer le problème qui a conduit à la défaillance ?

## Évitement des pannes

L'évitement des pannes (en anglais fault avoidance) est l'ensemble des moyens permettant, en amont, d'éviter que le système ne tombe en panne. Cela passe notamment par :
* des composants de très bonne qualité (très fiables) ;
* une très bonne conception du logiciel, un développement de qualité (génie logiciel).