2011-04-18 3 views
10

Dans tous les exemples de superviseur d'Erlang que j'ai pu voir, il y a habituellement un superviseur «maître» qui supervise l'arbre entier (ou du moins est le nœud racine dans l'arbre de supervision). Que faire si le superviseur "maître" casse? Comment le superviseur "maître" doit-il être supervisé? un motif typique?Erlang: Qui supervise le superviseur?

Répondre

10

Le superviseur supérieur est démarré dans le rappel start/2 de votre application à l'aide de start_link, ce qui signifie qu'il est lié au processus d'application. Si le processus d'application reçoit un signal de sortie du superviseur haut en train de mourir, il fait l'une des deux choses:

  1. Si l'application est lancée comme une application permanente l'ensemble du nœud i terminé (et peut-être à l'aide redémarrée HEART). Si l'application est démarrée comme temporaire, l'application s'arrête de fonctionner, aucune tentative de redémarrage ne sera effectuée.

3

Typiquement Supervisor est réglé sur «seulement» pour superviser d'autres processus. Quels hommes il n'y a pas de code écrit par l'utilisateur qui est exécuté par Supervisor - donc il est très peu susceptible de planter.

Bien sûr, cela ne peut pas être appliqué ... Donc, le modèle typique est de et non de d'avoir une logique spécifique à l'application dans Supervisor ... Il ne devrait superviser que - et ne rien faire d'autre.

+1

Mais Erlang est généralement utilisé pour le cloud computing .. Le superviseur peut se bloquer si, par exemple, le serveur contenant le superviseur "maître" tombe en panne (quelqu'un tire accidentellement la prise?). En outre, il y a généralement plus que le thread de votre application qui s'exécute sur le système d'exploitation. Cela ne signifie pas que tout le nuage devrait planter dans ce cas. – Daniel

+4

@dkk Erlang n'est généralement pas utilisé pour le cloud computing. Le cloud computing est un terme chargé apparu ces dernières années alors qu'Erlang existe depuis plus de 20 ans. Erlang fonctionne généralement plutôt sur des grappes de serveurs de taille petite à moyenne –

+2

@dkk: vous ne surveillez pas les autres nœuds avec des superviseurs, vous avez un superviseur principal par application sur chaque nœud. –

3

Bonne question. Je dois admettre que tous les exemples et les didacticiels ignorent la plupart du problème - même si parfois quelqu'un mentionne le problème (sans fournir un exemple de solution):

Si vous voulez la fiabilité, utilisez au moins deux ordinateurs, puis faites-les superviser les uns les autres. Comment réellement mettre en œuvre cela avec OTP est (avec l'état actuel de la documentation et des tutoriels), cependant, semble être quelque part entre bien caché et secret.

Questions connexes