灵丹妙药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)

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

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

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

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

同样可以用下面的方法设计。

|---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建议使用哪一种方法进行并发设计。

这就是我计划实现的方式。有一个小的变化。

|---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。

最新更新