3 votes

Puis-je utiliser le pool de modules pour décider de la répartition de la charge ?

Je cherche un moyen automatique de faire mon équilibre de charge et ce module m'a séduit.

Comme le dit le manuel,

pool peut être utilisé pour faire fonctionner un ensemble de nœuds Erlang comme un pool de processeurs de calcul. Il est organisé en un nœud maître et un ensemble de nœuds esclaves et comprend les fonctionnalités suivantes :

  • Les nœuds esclaves envoient des rapports réguliers au maître sur leur charge actuelle.
  • Des requêtes peuvent être envoyées au maître pour déterminer le nœud qui aura le moins de charge.

Les statistiques BIF(run_queue) sont utilisées pour estimer les charges futures. Elle renvoie la longueur de la file d'attente des processus prêts à être exécutés dans le système d'exécution Erlang.

Quelle est la fréquence et la charge pour que les nœuds esclaves envoient des rapports réguliers ?

Est-ce une bonne façon d'équilibrer la charge ?

1voto

lastcanal Points 660

Les rapports sont envoyés toutes les 2 secondes et utiliser les informations recueillies auprès de statistics(run_queue) pour déterminer le nœud le moins chargé. run_queue renvoie la taille de la file d'attente de l'ordonnanceur du nœud actuel.

Lorsque vous appelez pool:get_node/0 vous obtenez le nœud avec le plus petit nombre de tâches en attente d'être exécutées sur son planificateur. Gardez à l'esprit que les noeuds sont conservés dans un ordre trié, donc les appels à pool:get_node/0 n'interrogent pas directement les nœuds, mais s'appuient plutôt sur des informations qui peuvent remonter jusqu'à deux secondes.

Si vous avez besoin d'un pool de nœuds à charge équilibrée, pool fonctionne très bien.

Voici quelques informations supplémentaires tirées de la source pool.erl :

%% Supplies a computational pool of processors.
%% The chief user interface function here is get_node()
%% Which returns the name of the nodes in the pool
%% with the least load !!!!
%% This function is callable from any node including the master
%% That is part of the pool
%% nodes are scheduled on a per usgae basis and per load basis,
%% Whenever we use a node, we put at the end of the queue, and whenever
%% a node report a change in load, we insert it accordingly

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