【发布时间】:2016-01-14 04:22:30
【问题描述】:
我正在从事 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 建议将哪一种方法用于并发设计。
【问题讨论】:
-
这是一个相当广泛且有点模棱两可的问题。投票结束。
标签: elixir