我可以使用模块池来决定负载平衡吗?

时间:2013-03-17 02:16:06

标签: erlang

我正在寻找一种自动方式来实现我的负载平衡,这个模块吸引了我。

正如手册所说,

  

pool可用于将一组Erlang节点作为计算处理器池运行。   它被组织为主节点和一组从节点,并包含以下功能:

     
      
  • 从属节点定期向主站发送有关其当前负载的报告。
  •   
  • 可以将查询发送给主服务器,以确定哪个节点的负载最小。
  •   
     

BIF统计数据(run_queue)用于估计未来负载。   它返回Erlang运行时系统中准备运行进程的队列长度。

从节点发送常规报告的频率和负载是多少?

这是实现负载平衡的正确方法吗?

1 个答案:

答案 0 :(得分:1)

发送报告every 2 seconds并使用从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