【问题标题】:Elixir OTP design - how many processElixir OTP 设计 - 多少流程
【发布时间】: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


【解决方案1】:

这就是我计划实施的方式。稍作改动。

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

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

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 2014-10-18
    • 2019-10-23
    • 2018-05-12
    • 2016-03-20
    • 1970-01-01
    • 2017-01-26
    • 2011-05-07
    • 2016-11-24
    相关资源
    最近更新 更多