2011-10-18 72 views
0

我正在構建一個允許用戶上載圖像的Web應用程序。上傳圖片時,需要將其調整爲一種或多種尺寸,每種尺寸都需要發送到Amazon s3進行存儲。每個圖像大小的元數據和URL都存儲在Web服務器上的單個數據庫記錄中。我正在使用消息隊列異步執行調整大小和上傳(因爲每個請求可能會有大圖像和多個大小調整)。調整大小/上傳任務完成時,數據庫記錄需要使用url進行更新。將數據庫與消息隊列分離的最佳做法

我的問題是執行任務的工作人員將無法訪問數據庫。我正在考慮在完成任務後使用適當的信息更新數據庫記錄,從工作人員發回http回調到Web應用程序。有其他的選擇或原因,我應該以另一種方式做到這一點?

我使用python/pylons作爲web後端,mysql作爲數據庫,而celery/amqp作爲消息傳遞。

謝謝!

+0

「...執行任務的工作人員將無法訪問數據庫。」有什麼特別的原因? –

+0

大多數情況下,工作人員將在不同的機器上運行,並且不會直接訪問數據庫(出於安全原因)。 –

回答

2

看來你的目標不是將數據庫從MQ中分離出來,而是從工人中分離出來。因此,您可以創建另一個接收完成通知的隊列,並讓另一個工作人員選擇通知並適當地更新數據庫。

+0

+1:另一個隊列。 –

+0

正確,標題可能有點誤導。我曾考慮過把它分成兩個單獨的任務,但沒有考慮過另一個隊列。這實際上很有意義,因爲我可以將需要數據庫訪問的任務發送給特權機器。謝謝。 –

相關問題