我有一个Node.js应用程序,其中包含一小组用户,目前使用单个Web进程进行架构。我正在考虑添加一个后保存触发器,当一个记录被添加到我的一个表时将被调用。当执行保存触发器之后,我想对外部API执行大量IO操作。 IO操作的数量取决于记录中数组列中的元素数。因此,在将每个记录保存在此特定表中之后,我可以执行大量异步操作。
我考虑过按照Worker Dynos, Background Jobs and Queueing的建议将这项工作转移到后台工作。本文根据经验将超过500毫秒的任务移至后台作业。但是,在使用RabbitMQ(Asynchronous Web-Worker Model Using RabbitMQ in Node)完成示例后,我不相信它是值得花时间设置一切。
所以,我的问题是:
答案 0 :(得分:2)
对于并发用户数量有限的应用,可以在网络流程中保留长时间运行的功能吗?
这更像是一个偏好问题,而不是任何事情。
总的来说,我说不 - 这不好......但这是基于构建在heroku工作者中运行的rabbitmq服务的经验,而不是认为这是一件困难的事情。
通过一些练习,您可能会发现这是一个更简单的解决方案,因为我拥有(它允许更简单的代码,更强大的代码,因为它将Web从背景处理器中分离出来 - 允许每个人在不知道的情况下运行彼此直接)
你错过了什么吗?不是真的如果我最终决定将此作品发送到后台作业,那么在保存触发器后更改我的内容似乎并不难。我错过了什么吗?
只要您以结构良好且模块化的方式编写当前的网上流程代码,将其移至后台流程通常不是什么大问题
人们从不得不将代码移到后台获得的大部分恐慌来自于他们的代码与HTTP请求/响应过程紧密耦合(我从个人经历中知道它有多痛苦)有没有办法比实现消息队列更容易?
分布式计算和后台处理有很多选择。我个人喜欢RabbitMQ以及它使用的消息模式。
我建议尝试一下,看看它是否适合你。
其他选项包括redis上面有pub / sub库,使用对其他Web服务器的直接HTTP API调用,或者只是在后台进程中使用计时器来检查给定频率上的数据库表并使代码运行在他找到的数据上。
P.S。您可能会发现我感兴趣的RabbitMQ For Developers课程,如果您想深入了解RMQ w / node:http://rabbitmq4devs.com