Les deux décrivent la cohérence du comportement d'une application, mais la «robustesse» décrit la réponse d'une application à son entrée , tandis que la «tolérance aux pannes» décrit la réponse d'une application à son environnement .
Une application est robuste lorsqu'elle peut fonctionner de manière cohérente avec des données incohérentes. Par exemple: une application de cartes est robuste lorsqu'elle peut analyser des adresses dans différents formats avec différentes fautes d'orthographe et renvoyer un emplacement utile. Un lecteur de musique est robuste lorsqu'il peut continuer à décoder un MP3 après avoir rencontré un cadre mal formé. Un éditeur d'image est robuste lorsqu'il peut modifier une image avec des métadonnées EXIF intégrées qu'il pourrait ne pas reconnaître - surtout s'il peut apporter des modifications à l'image sans détruire les données EXIF.
Une application est tolérante aux pannes lorsqu'elle peut fonctionner de manière cohérente dans un environnement incohérent. Une application de base de données est tolérante aux pannes lorsqu'elle peut accéder à un autre fragment lorsque le serveur principal n'est pas disponible. Une application Web est tolérante aux pannes lorsqu'elle peut continuer à traiter les demandes du cache même lorsqu'un hôte API est inaccessible. Un sous-système de stockage est tolérant aux pannes lorsqu'il peut renvoyer des résultats calculés à partir de la parité lorsqu'un membre de disque est hors ligne.
Dans les deux cas, l'application devrait rester stable, se comporter de manière uniforme, préserver l'intégrité des données et fournir des résultats utiles même en cas d'erreur. Mais lors de l'évaluation de la robustesse, vous pouvez trouver des critères impliquant des données, tandis que lors de l'évaluation de la tolérance aux pannes, vous trouverez des critères impliquant la disponibilité.
L'un ne mène pas nécessairement à l'autre. Une application de reconnaissance vocale mobile peut être très robuste, offrant une capacité étonnante de reconnaître la parole de manière cohérente dans une variété d'accents régionaux avec d'énormes quantités de bruit de fond. Mais s'il est inutile sans une connexion de données cellulaire rapide, il n'est pas très tolérant aux pannes. De même, une application de publication Web peut être extrêmement tolérante aux pannes, avec plusieurs redondances à chaque niveau, capable de perdre des centres de données entiers sans échec, mais si elle supprime une table utilisateur et se bloque la première fois que quelqu'un s'enregistre avec une apostrophe dans son nom de famille , ce n'est pas du tout robuste.
Si vous recherchez de la littérature savante pour aider à décrire la distinction, vous pouvez chercher dans des domaines spécifiques qui utilisent des logiciels, plutôt que largement des logiciels en général. La recherche sur les applications distribuées pourrait être un terrain fertile pour les critères de tolérance aux pannes, et Google a publié certaines de leurs recherches qui pourraient être pertinentes. La recherche sur la modélisation des données aborde probablement les questions de robustesse, car les scientifiques sont particulièrement intéressés par les propriétés de robustesse qui donnent des résultats reproductibles. Vous pouvez probablement trouver des articles décrivant des applications statistiques qui pourraient être utiles, comme dans la modélisation du climat, la modélisation de la propagation RF ou le séquençage du génome. Vous trouverez également des ingénieurs discutant de la «conception robuste» dans des domaines tels que les systèmes de contrôle.
Le livre blanc de Google File System décrit leur approche des problèmes de tolérance aux pannes, qui implique généralement l'hypothèse que les défaillances des composants sont routinières et que l'application doit donc s'y adapter:
Ce projet pour une classe chez Rutgers prend en charge une définition orientée "panne de composant" de "tolérance aux pannes":
Il existe de nombreux articles sur la «modélisation robuste XYZ», selon le domaine que vous étudiez. La plupart décriront leurs critères de «robustesse» dans l'abstrait, et vous constaterez que tout cela a à voir avec la façon dont le modèle traite les entrées.
Ce mémoire d'un climatologue de la NASA décrit la robustesse comme critère d'évaluation des modèles climatiques:
Cet article d'un chercheur du MIT examine les applications de protocole sans fil, un domaine dans lequel la tolérance aux pannes et la robustesse se chevauchent, mais les auteurs utilisent «robuste» pour décrire les applications, les protocoles et les algorithmes, tandis qu'ils utilisent la «tolérance aux pannes» en référence à la topologie et composants: