Oui, il est applicable partout, mais il est important de noter dans quel contexte il est censé être utilisé. Il ne no signifie que l'application dans son ensemble se plante, ce qui, comme l'a souligné @PeterM, peut être catastrophique dans de nombreux cas. L'objectif est de construire un système qui, dans son ensemble, ne se bloque jamais mais peut gérer les erreurs en interne. Dans notre cas, il s'agissait de systèmes de télécommunication dont les temps d'arrêt sont de l'ordre de quelques minutes par an.
La conception de base consiste à superposer le système et à isoler les parties centrales du système pour surveiller et contrôler les autres parties qui effectuent le travail. Dans la terminologie de l'ANP, nous avons superviseur y travailleur processus. Les superviseurs ont pour tâche de surveiller les travailleurs, et d'autres superviseurs, dans le but de les redémarrer correctement lorsqu'ils tombent en panne, tandis que les travailleurs effectuent tout le travail réel. Structurer correctement le système en couches en utilisant ce principe de séparation stricte des fonctionnalités vous permet d'isoler la plupart de la gestion des erreurs des travailleurs vers les superviseurs. Vous essayez de vous retrouver avec un petit un noyau d'erreur à sécurité intégrée, qui, s'il est correct, peut gérer les erreurs dans tout le reste du système. C'est dans ce contexte que la philosophie "let-it-crash" est censée être utilisée.
Vous obtenez le paradoxe suivant : vous pensez aux erreurs et aux défaillances partout dans le but de les traiter dans le moins d'endroits possible.
La meilleure approche pour traiter une erreur dépend bien sûr de l'erreur et du système. Parfois, il est préférable d'essayer d'attraper les erreurs localement au sein d'un processus et d'essayer de les traiter là, avec la possibilité d'échouer à nouveau si cela ne fonctionne pas. Si vous avez un certain nombre de processus de travail qui coopèrent, il est souvent préférable de les planter tous et de les redémarrer à nouveau. C'est un superviseur qui fait cela.
Vous avez besoin d'un langage qui génère des erreurs/exceptions lorsque quelque chose ne va pas, afin de pouvoir les piéger ou de les faire planter le processus. Ignorer les valeurs de retour des erreurs n'est pas la même chose.
1 votes
J'ai écrit ceci il y a quelque temps : mazenharake.wordpress.com/2009/09/14/let-it-crash-the-right-way Vous pourrez peut-être y trouver quelque chose d'utile.
0 votes
Merci Mazen. C'est un bon billet ! Je comprends la philosophie que vous décrivez - ce que je me demande, c'est si le threading, les processus ou les domaines d'application de .NET (disons) sont à la hauteur de la tâche de redémarrage comme une forme de construction de contrôle... ?
0 votes
Je pense que cela peut être appliqué partout. Je suis cependant sur la corde raide ici car je ne peux pas le prouver :) Donc pour moi, c'est juste un sentiment ou une supposition, je n'ai pas essayé dans une autre langue pour savoir :)