2015-10-15 58 views
1

我正在開發Elixir OTP應用程序設計。在應用程序設計方面我有以下選擇。Elixir OTP設計 - 多少個工藝

以下是兩種設計。

|---supervisor 
| |---handler for work #1 (GenServer) 
|  |--handler task (Task) 
| |---handler for work #2 (GenServer) 
|  |--handler task (Task) 
| |----handler for work #3 (GenServer) 
|  |--handler task (Task) 

每個處理程序執行不同類型的工作(如fetch twitter,fetch news等)。

主管動態運行一個或多個處理程序。處理程序每​​隔幾秒執行一次以獲取不同類型的工作。

任務類型是有限的(如日誌數據或發佈數據)每個處理程序將獲取並記錄數據或發佈數據。工作處理程序獲取數據並生成任務以處理和發佈數據。

在上述設計中,任務的生命週期將一直持續到記錄或發佈數據,並且工作處理器的生命週期將一直持續到獲取單個或多個記錄。主管會在幾秒鐘後再次動態運行處理程序。

同樣可以按照以下方式進行設計。

|---supervisor (handler) 
| |---handler for work #1 (GenServer) 
| |---handler for work #2 (GenServer) 
| |---handler for work #3 (GenServer) 
|---supervisor (task) 
| |---handler for task #1 (GenServer) 
| |---handler for task #2 (GenServer) 

在上面的設計中,兩個主管分別處理工作和任務。

任務處理程序將在本地別名下注冊。工作處理程序將發送消息到相應的任務以進一步處理。

這些方法是否存在任何限制,以及根據OTP針對並行設計提出了哪些建議。

+0

這是一個相當廣泛和有點模棱兩可的問題。投票結束。 –

回答

0

這就是我計劃實施的方式。稍作改動。

|---supervisor (handler) 
| |---handler for work #1 (GenServer) 
|  |--handler task (Task) 
| |---handler for work #2 (GenServer) 
|  |--handler task (Task) 
| |---handler for work #3 (GenServer) 
|  |--handler task (Task) 

而不是主管每隔幾秒動態運行處理程序。每個處理程序將被運行和監督。處理程序將每隔幾秒創建一個Task。