我什么时候需要在Heroku中使用工作进程

问题描述 投票:1回答:1

我有一个Node.js应用程序,其中包含一小组用户,目前使用单个Web进程进行架构。我正在考虑添加一个后保存触发器,当一个记录被添加到我的一个表时将被调用。当执行保存触发器之后,我想对外部API执行大量IO操作。 IO操作的数量取决于记录中数组列中的元素数。因此,在每个记录保存在此特定表中之后,我可能会执行大量异步操作。

我想把这项工作转移到Worker Dynos, Background Jobs and Queueing建议的后台工作。本文根据经验将超过500毫秒的任务移至后台作业。然而,在使用RabbitMQ(Asynchronous Web-Worker Model Using RabbitMQ in Node)完成示例之后,我不相信它是值得花时间设置一切。

所以,我的问题是:

  • 对于具有有限数量的并发用户的应用程序,是否可以在Web进程中保留长时间运行的功能?
  • 如果我最终决定将这项工作发送到后台工作,那么改变我的保存后触发器似乎并不难。我错过了什么吗?
  • 有没有办法比实现消息队列更容易?
node.js heroku rabbitmq message-queue
1个回答
2
投票

对于具有有限数量的并发用户的应用程序,是否可以在Web进程中保留长时间运行的功能?

这是一个偏好问题,而不是任何事情。

一般来说,我说不 - 这不好......但这是基于构建在heroku工作者中运行的rabbitmq服务的经验,而不是认为这是一项困难的事情。

通过一些练习,您可能会发现这是一个更简单的解决方案,因为我拥有它(它允许更简单的代码,更强大的代码,因为它将Web从背景处理器中分离出来 - 允许每个人直接运行而不直接了解彼此)

如果我最终决定将这项工作发送到后台工作,那么改变我的保存后触发器似乎并不难。我错过了什么吗?

你错过了什么吗?并不是的

只要您以结构良好且模块化的方式编写当前的网络流程代码,将其移至后台进程通常不是什么大不了的事

人们从不得不将代码移到后台所带来的大部分恐慌来自于他们的代码与HTTP请求/响应过程紧密耦合(我从个人经历中知道它有多痛苦)

有没有办法比实现消息队列更容易?

分布式计算和后台处理有很多选择。我个人喜欢RabbitMQ以及它使用的消息模式。

我建议尝试一下,看看它是否适合你。

其他选项包括redis上面有pub / sub库,使用对另一个Web服务器的直接HTTP API调用,或者只是在后台进程中使用一个计时器来检查给定频率上的数据库表并根据数据运行代码它找到了。

附:你可能会发现我感兴趣的RabbitMQ For Developers课程,如果你想深入研究RMQ w / node:http://rabbitmq4devs.com

© www.soinside.com 2019 - 2024. All rights reserved.