2013-03-17 90 views
3

我正在尋找一種自動的方式來做我的負載平衡,這個模塊吸引了我。我可以使用模塊池來決定負載平衡嗎?

作爲手冊說,

池可用於運行一組Erlang節點作爲計算處理器的池。 它是作爲一個主站和一組從節點,幷包括以下功能:

  • 從節點發送定期報告給主他們的當前負載。
  • 可以將查詢發送給主站以確定哪個節點負載最少。

BIF統計信息(run_queue)用於估計未來的負載。 它返回Erlang運行時系統中準備運行進程隊列的長度。

從屬節點發送定期報告的頻率和負載是多少?

這是一個負載平衡的正確方法嗎?

回答

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 
+0

太謝謝你了。 – goofansu 2013-03-23 01:16:32