曾经使用RabbitMQ和Node.js进行长时间的运行吗?

时间:2011-09-05 14:16:15

标签: node.js rabbitmq

我正在尝试理解在Node.js中处理长时间运行任务的最佳方法。显然在Node.js中执行一个长时间运行的过程并不是一个好主意,因为节点的单线程性质。

我是RabbitMQ的忠实粉丝,所以我想在两个节点服务器之间使用兔子:

Node.js Web Server <--> RabbitMQ <--> Node.js Backend Worker

当然,我们的想法是不要放慢Web服务器的速度。我通常会用Java替换后端服务器,但我试图将它全部保留为JS。

我不是Node程序员,所以我不确定这是一个好主意还是可能?有人试过这样的事吗?

1 个答案:

答案 0 :(得分:0)

这取决于你所说的“长时间运行的过程” - 要阻止Node.JS,你必须一次完成大量的计算。执行I / O(粗略地,调用带有回调参数的东西)将产生事件循环。

在网站中可以做的事情很少,主要不涉及I / O.例如,与数据库交谈 - I / O.从文件系统中读取模板 - I / O. (使用数据库中的数据运行模板 - 好吧,不是I / O。也可能不是很贵。)

如果您的图表中只有两个Node.JS流程,那么对每个客户端的响应仍然会花费多长时间(I / O时间加上计算时间)。但是,您可能会获得更好的吞吐量,因为您不会将传入请求序列化。另一方面,请求可能只是在RabbitMQ中备份,从而将更高的吞吐量转换为更高的延迟。

然后,您还有机会运行/多个/多个后端工作人员,以更快地完成请求。仅在Web服务器上完成工作,但运行一堆Web服务器进程并在那些与nginx进行负载平衡的情况下也会产生类似的效果。