Node.js 事件驱动处理体系结构建议

Node.js 事件驱动处理体系结构建议,node.js,architecture,event-handling,Node.js,Architecture,Event Handling,我目前正在从事一个项目,需要实时执行文件处理。这是我试图实现的工作流程 a. User requests a file to be processed to Server A (web) b. Server A forwards the request to Server B c. Server B finishes and signals Server A that it’s done d. Server A signals the user that the file is ready (w

我目前正在从事一个项目,需要实时执行文件处理。这是我试图实现的工作流程

a. User requests a file to be processed to Server A (web)
b. Server A forwards the request to Server B
c. Server B finishes and signals Server A that it’s done
d. Server A signals the user that the file is ready (web)

我在寻找什么?我需要找到一种简单的事件驱动方式来在服务器a和服务器B之间进行通信(即步骤B和c)。仅供参考,我将使用socket.io通过web与用户就步骤a和d进行通信

我将使用的环境是运行node.js服务的Ubuntu14.04服务器(请注意,只要有一个接口,该解决方案就不一定是严格意义上的node)

似乎足够简单?这就是它变得复杂的地方。每一组服务器(现在考虑它们是web服务器还是处理服务器)都将在一个云中进行复制(每个服务器都有很多)。需要注意的是,当处理服务器完成对文件的处理时,它必须向所有web服务器发出文件已准备就绪的信号。为什么?每个web服务器可能都为等待同一文件的请求提供了服务


我需要一个能够以最快的时间(即事件驱动而不是轮询)实现此工作流的解决方案,该解决方案与node.js接口并在Ubuntu上运行。有什么想法吗?

让您的生活更轻松的一种方法可能是使用redis与web服务器进行通信,告知文件何时加载并准备就绪。Redis内置了频道订阅/消息传递功能,非常容易与node.js一起使用


因此,当文件请求传入时,如果web服务器以前从redis听说文件已加载,它可以获取文件并返回,否则会向后端发送处理文件的信号,并等待redis频道的通知

redis可以解决此问题。。然而,有两点使它有点像一场比赛的阻碍。1-这有点过分,因为它是一个完整的键/值存储&2-它使用一个集中式代理模型运行(您有一个点存储和分发消息)。。这确实让我想到了zeroMQ,它类似于rabbitMQ(Redis用于消息传递的东西),但可以去中心化。更多信息将标记为已回答。。最终采用了zeroMQ brokerless模型