2014-09-03 78 views
1

我目前正在研究一個需要實時執行文件處理的項目。這裏的工作流程,我想實現事件驅動的處理架構建議

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) 

Simple Event Arch

什麼我找什麼?我需要找到一個簡單的事件驅動的方式來在服務器A的服務器B(即步驟b & c)之間進行通信。僅供參考我將使用socket.io通過網絡在步驟a & d上與用戶進行通信。

我將使用的環境是運行node.js服務的Ubuntu 14.04服務器(注意,只要存在接口,解決方案不必嚴格地爲節點)。

似乎夠簡單嗎?這是它變得複雜的地方。每一組服務器(現在都將它們視爲Web服務器與處理服務器)將在雲中進行復制(每個服務器都有很多)。需要注意的是,當處理服務器完成一個文件的處理時,它必須發信號給所有網絡服務器該文件已準備就緒。爲什麼?每個Web服務器可能已經爲等待相同文件的請求提供服務。

Cloud event arch

我需要達到這個流程在最短的時間內(即事件驅動,而不是輪詢)與node.js的接口,並運行在Ubuntu的解決方案。有什麼想法?

回答

1

使您的生活更輕鬆的一種方法可能是使用redis將您的通信反饋給Web服務器,以瞭解文件何時加載並準備就緒。 Redis內置了頻道訂閱/消息傳遞功能,並且非常容易與node.js一起使用

因此,當文件請求進入時,如果Web服務器以前從Redis聽說過該文件已加載,則可以獲取文件並返回它,否則發信號後端來處理文件,並等待來自redis頻道的通知

+0

Redis可以解決這個問題..但有兩點使它成爲一個顯示塞的一點點。 1 - 這是一個有點矯枉過正,因爲它是一個完整的關鍵/價值存儲&2 - 它使用集中式經紀模式運行(您有一個點存儲和分發消息) – 2014-09-03 21:20:53

+0

但是,這確實導致我zeroMQ這是類似的到rabbitMQ(Redis用於消息傳遞),但可以分散。更多在這裏http://zeromq.org/whitepapers:brokerless – 2014-09-03 21:22:12

+0

去標記這是答案..結束了與zeroMQ brokerless模型去http://zeromq.org/whitepapers:brokerless – 2014-09-11 21:03:27