Genstage 和 polling 是推荐的模式吗?
Genstage and polling are a recommended pattern?
我正在 elixir 中开发我的第一个 medium/big 应用程序,我正在尝试熟悉 elixir 系统设计和架构中的常见模式。
此时我正在尝试实现一个输入队列(目前使用 erlang :queue 实现),通过 API 公开,我想让该队列中的消费者执行一些处理并存储数据.
我已经使用代理创建了队列,并且我已经实现了一个 genStage 来查询队列中的元素和一个 genstage 消费者来执行我需要的所有处理。总结起来是这样的
队列代理 ------> GenStage 生产者 --------> GenStage 消费者 -----> 数据库
我的问题如下:
- 这个模式对 Elixir 有效吗?
- GenStage 生产者在队列上执行的轮询是否有效,每次消费者请求新元素时都会询问?
- 此模式是否有任何性能影响,特别是队列代理是否有任何可能的阻塞影响?
经过一些评论和阅读文档后,我意识到 GenStage
是基于 GenServer
并且我有可能从 GenStage
.[=18= 外部管理内部状态]
在此之后我重构了代码,现在我有 :queue
作为 GenStage
状态的一部分,所以我不需要轮询 GenStage
之外的任何队列和我还可以使用 handle_cast
方法将元素添加到队列中。
现在我的队列作为 GenStage
生产者工作,并且我已经能够作为消费者连接我的数据库服务
我正在 elixir 中开发我的第一个 medium/big 应用程序,我正在尝试熟悉 elixir 系统设计和架构中的常见模式。
此时我正在尝试实现一个输入队列(目前使用 erlang :queue 实现),通过 API 公开,我想让该队列中的消费者执行一些处理并存储数据.
我已经使用代理创建了队列,并且我已经实现了一个 genStage 来查询队列中的元素和一个 genstage 消费者来执行我需要的所有处理。总结起来是这样的
队列代理 ------> GenStage 生产者 --------> GenStage 消费者 -----> 数据库
我的问题如下:
- 这个模式对 Elixir 有效吗?
- GenStage 生产者在队列上执行的轮询是否有效,每次消费者请求新元素时都会询问?
- 此模式是否有任何性能影响,特别是队列代理是否有任何可能的阻塞影响?
经过一些评论和阅读文档后,我意识到 GenStage
是基于 GenServer
并且我有可能从 GenStage
.[=18= 外部管理内部状态]
在此之后我重构了代码,现在我有 :queue
作为 GenStage
状态的一部分,所以我不需要轮询 GenStage
之外的任何队列和我还可以使用 handle_cast
方法将元素添加到队列中。
现在我的队列作为 GenStage
生产者工作,并且我已经能够作为消费者连接我的数据库服务