事件驱动的处理架构build议

我目前正在开发一个需要实时进行文件处理的项目。 这是我想要实现的工作stream程

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) 

简单的事件拱门

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

我将使用的环境是运行node.js服务的Ubuntu 14.04服务器(请注意,只要存在接口,解决scheme就不必严格控制节点)。

似乎很简单? 这是它变得复杂的地方。 每一组服务器(现在认为它们是networking服务器和处理服务器)都将在云中进行复制(每个服务器都是如此)。 需要注意的是,当一个处理服务器完成一个文件的处理时,它必须向所有的 Web服务器发送文件已经准备好的信号。 为什么? 每个Web服务器可能已经为等待相同文件的请求提供服务。

云事件拱

我需要一个解决scheme,以尽可能最快的时间(即事件驱动而不是轮询)来实现这个工作stream程,与node.js接口并在Ubuntu上运行。 有什么想法吗?

让生活更轻松的一种方法可能是使用redis将通信返回到Web服务器,以了解文件何时加载并准备就绪。 Redis已经构build了频道订阅/消息传递,并且非常易于使用node.js

所以当文件请求进来的时候,如果Web服务器之前已经从redis听说过这个文件被加载了,它可以得到这个文件并返回它,否则发信号给后端来处理这个文件,并等待来自redis通道的通知