3 votes

Démarrer sélectivement des applications d'élixir dans un parapluie

Comment contrôler quelles applications démarrent dans un projet parapluie, pour mon cas d'utilisation spécifique :

  1. Démarrer certaines applications uniquement si elles ne sont pas déjà en cours d'exécution dans le cluster (par exemple, l'application Singleton).
  2. Démarrer uniquement certaines applications en fonction du nom du nœud (par exemple, certaines applications peuvent utiliser des systèmes distants dont l'adresse IP est limitée).
  3. Ne lancez pas d'applications automatiquement lors de l'ouverture d'une console (par exemple iex -S mix)

Merci

5voto

bitwalker Points 7588

Vous pouvez gérer le numéro 1 en utilisant des OTP applications distribuées capacité. Vous devez configurer le kernel application comme suit :

config :kernel, :distributed, [
  {:app1, 5_000, [:"node1@<x.x.x.x>", {:"node2@<x.x.x.y>", :"node3@<x.x.x.z>"}]},
  {:app2, [:"node2@<x.x.x.y>", {:"node1@<x.x.x.x>", :"node3@<x.x.x.z>"}]},
  ...
]

config :kernel,
  sync_nodes_mandatory: [:"node1@<x.x.x.x>", :"node2@<x.x.x.y>", ...],
  sync_nodes_timeout: 5_000

Ce qui précède permettra de garantir que app1 est lancé le node1 et si node1 tombe en panne ou est indisponible, il essaiera l'un des nœuds de secours, node2 o node3 (l'ordre est indéfini). Il faudra également que cela se produise dans les 5 secondes. De même, app2 sera lancé le node2 ou, à défaut, l'une des sauvegardes, mais il n'y a pas de délai de démarrage.

Les deux autres paramètres du noyau exigent qu'avant le lancement de toute application, tous les nœuds de la liste soient connectés, et ce dans un délai de 5 secondes, faute de quoi le processus de démarrage échouera.

Tous ces paramètres peuvent être ajustés si nécessaire, en fonction des besoins de votre cluster. Ce n'est pas tout à fait la même chose que de déterminer automatiquement un nœud auquel assigner une application, mais cela permettra de s'assurer qu'elle ne fonctionne que sur un des nœuds.

Vous pouvez en savoir plus à ce sujet dans le manuel Erlang, dans la rubrique Applications distribuées document.

Ce qui précède répond également à votre demande pour le point 2, mais il s'agit moins de démarrer en fonction du nom du nœud, et plus de configurer les nœuds sur lesquels l'application est autorisée à s'exécuter, et elle le fera. Vous pouvez gérer cela vous-même, en utilisant included_applications Mais pour cela, vous devez lancer les applications incluses dans l'arbre de supervision de l'application incluse. Selon la façon dont votre parapluie est configuré, cela peut signifier que vous devez créer une application "shell", qui est principalement responsable de la coordination du démarrage et de la configuration des applications incluses. Vous pouvez en savoir plus sur ces aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X