2010-11-14 31 views
1

Préface: Lorsque je dis «machine» ci-dessous, je veux dire soit un serveur physique dédié, soit un serveur privé virtuel. Quand je dis «nœud», je veux dire, une instance de la machine virtuelle erlang, dont plusieurs peuvent être exécutées comme des processus séparés sous un seul noyau unix.Est-il préférable de démarrer plusieurs nœuds erlang par machine, ou seulement un par machine?

J'ai un projet qui implique plusieurs applications erlang/OTP. Les applications fonctionneront ensemble et se parleront sur la même machine. Ils vont tous frapper le disque, en utilisant la mémoire et les processus erlang spawning. Ils utiliseront également les ressources réseau car ils dialogueront avec des machines similaires avec le même ensemble d'applications s'exécutant sur eux dans un cluster.

La quasi-totalité de cette communication s'effectue via HTTP. Ainsi, je pourrais séparer chaque application OTP erlang dans une instance distincte de la machine virtuelle erlang sur la même machine et ils pourraient encore se parler. Ma question est: Vaut-il mieux les faire fonctionner sous une machine virtuelle erlang de sorte que ce processus erlang VM puisse allouer l'accès aux ressources entre eux, et planifier l'exécution des différents processus erlang.

Ou est-il préférable d'avoir des nœuds erlang séparés sur un serveur donné?

Si l'un est meilleur que l'autre, pourquoi?

Je suppose que l'exécution de toutes ces applications dans un seul erlang vm qui est donné, essentiellement, la course complète du serveur, se traduira par de meilleures performances. L'OS gère juste le disque et ram au niveau bas, et a seulement un processus significatif (le erlang VM) pour commuter avec ... et le VM d'erlang est probablement plus intelligent au sujet de l'allocation des ressources quand il a la vue holistique de tous les processus erlang.

Cela peut être quelque chose que j'ai besoin de tester, mais je ne suis pas en mesure de le faire efficacement à court terme.

Répondre

2

La réponse est: ça dépend.

Avantages de l'utilisation d'un seul noeud:

  • La mémoire est contrôlée par un seul Erlang VM. C'est beaucoup plus facile.
  • La communication entre applications (si vous utilisez la messagerie erlang) est plus rapide.
  • Moins passe contexte du système d'exploitation arrive

Avantages de l'utilisation de plusieurs nœuds:

  • Si le système est un lien dans le code C à la machine virtuelle, la mort d'un nœud en raison d'un bogue dans C sera pas tuer les autres.
+1

Un autre avantage de plusieurs nœuds est que vous n'avez pas besoin du support de smp. – Zed

2

d'accord avec @I DONNEZ CRAP RÉPOND

Je voudrais aller avec une machine virtuelle.Voici pourquoi:

  • gestion dynamique des files d'attente de temps d'exécution appartenant à ordonnanceurs (avec origine variée de CPU charge son importante)
  • moins machines virtuelles pour surveiller
  • mieux comprendre l'allocation de mémoire et plus facile à repérer processus malveillant (peut comparer tous à la fois)
  • beaucoup plus facile supervision inter app

Je ne voudrais pas à propos de l'accident VM - vous devez être préparé aucune façon. Le coeur fonctionne particulièrement bien dans le groupe d'unités égales.

1

Nous avons toujours utilisé une machine virtuelle par application car elle est plus facile à gérer. Le planificateur et le support SMP dans Erlang ont parcouru un long chemin au cours des dernières années, donc il n'y a pas autant de raisons que d'exécuter plusieurs machines virtuelles sur le même nœud.