Elixir OTP设计 - 有多少工序

时间:2015-10-15 15:53:58

标签: elixir

我正在研究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)

每个处理程序执行不同类型的工作(如获取twitter,获取新闻等)。

主管动态运行一个或多个处理程序。处理程序每​​隔几秒执行一次,以获取不同类型的工作。

每个处理程序将获取任务类型(如日志数据或发布数据),并记录数据或发布数据。工作处理程序获取数据并生成处理和发布数据的任务。

在上述设计中,任务的生命周期将一直到记录或发布数据,并且工作处理程序的生命周期将一直到取出单个或多个记录。几秒钟后,主管将再次动态运行处理程序。

同样可以按照以下方式设计。

|---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建议并行设计。

1 个答案:

答案 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)

而不是每隔几秒就有一次动态运行处理程序。每个处理程序都将运行和监督。处理程序将每隔几秒创建一个任务。