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 回答