我正在研究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建议并行设计。
答案 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)
而不是每隔几秒就有一次动态运行处理程序。每个处理程序都将运行和监督。处理程序将每隔几秒创建一个任务。