3

負荷分散を自動的に行う方法を探していて、このモジュールに惹かれました。

説明書にある通り、

pool は、Erlang ノードのセットを計算プロセッサのプールとして実行するために使用できます。マスター ノードとスレーブ ノードのセットとして編成され、次の機能が含まれます。

  • スレーブ ノードは、現在の負荷に関する定期的なレポートをマスターに送信します。
  • クエリをマスターに送信して、負荷が最も少ないノードを決定できます。

BIF 統計 (run_queue) は、将来の負荷を見積もるために使用されます。Erlang ランタイム システムで実行可能なプロセスのキューの長さを返します。

スレーブ ノードが定期的にレポートを送信する頻度と負荷はどのくらいですか?

ロードバランスの取り方は適切ですか?

4

1 に答える 1

1

レポートは2秒ごとに送信され、そこから収集された情報を使用statistics(run_queue)して、負荷が最も少ないノードを判別します。run_queue現在のノードのスケジューラのキューサイズを返します。

呼び出すpool:get_node/0と、スケジューラーで実行されるのを待機しているタスクの数が最も少ないノードを取得しています。ノードはソートされた順序で保持されるため、呼び出しはpool:get_node/0ノードに直接クエリを実行するのではなく、最大2秒前の情報に依存することに注意してください。

ノードの負荷分散されたプールが必要な場合は、poolうまく機能します。

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
于 2013-03-22T16:19:05.380 に答える