11.4.3.3.6 : Tolérance aux pannes


Traditionnellement, les codes de calcul ne sont pas conçus pour être robustes face aux pannes matérielles. Si une partie du centre de calcul tombe en panne, les calculs en cours sont brutalement arrêtés et toutes leurs données non sauvegardées sont perdues.

Si cette approche simplifie grandement l'écriture des programmes, elle est de moins en moins acceptable à mesure que le calcul distribué est pratiqué à une échelle toujours plus grande. En effet, le temps moyen entre deux pannes décroît en proportion du nombre de nœuds. S'il se compte en années sur des systèmes simples comme un nœud de calcul unique, il peut descendre en dessous du jour dans les grands centres de calcul actuel, et certaines prédictions estiment qu'il sera inférieur à une heure dans la prochaine génération exascale de super-calculateurs.

Dans ces conditions, des approches simples et relativement automatisables comme le checkpointing (mise en pause du calcul et sauvegarde complète de son état à intervalle régulier) qui ont bien servi les centres de calcul par le passé ne seront plus applicables. Il faudra à la place fournir des garanties de tolérance aux pannes à grain plus fin, ce qui est très difficile dans un système possédant un état interne qui varie rapidement dans le temps comme un programme écrit dans un style de programmation impératif.

Ici encore, l'application du paradigme de la programmation fonctionnelle peut améliorer la situation, puisque la transparence référentielle permet de considérer chaque nœud de calcul comme un outil aisément remplaçable au service du calcul d'une fonction mathématique sur un bloc de donnée. Les systèmes Hadoop et Apache Spark précités fournissent ainsi une tolérance aux fautes aux utilisateurs par réplication des données et redémarrage automatique des calculs présents sur un nœud de calcul qui est tombé en panne.

Hadoop et Apache Spark favorisent à la base fortement l'utilisation des langages Scala et Java, mais il est possible de les interfacer avec d'autres langages en utilisant des outils comme MR4C[32]Google, Map Reduce for C.