2010-08-26 63 views
8

背景

我有一個web應用程序,將創建用戶輸入的圖像。 圖像創建可能需要幾秒鐘。此Web應用程序是否需要任務隊列?

問題

如果我讓服務器線程,也就是處理請求/響應也產生,即是要佔用一個線程幾秒鐘,可能拖垮我的服務器的形象,影響性能,殺小狗等

問題

我應該使用一個任務隊列,如Celery,使服務器能夠手頭寬裕的影像創作,並返回到處理請求/響應?我沒有問題,讓創建圖像的用戶等待,但我不希望它影響其他人訪問該網站。

回答

6

我要說不 - 現在。

  • 幾秒鐘不會那麼長。
  • 無論如何你必須實施某種輪詢(或彗星處理)才能將圖像反饋給用戶。
  • 它會使你的系統更加複雜。
  • 設計系統以便稍後添加任務隊列是可行和容易的。

所以,請先保持簡單並讓它工作,但請記住,您可能稍後添加任務隊列。

當/需要縮放時,執行任務隊列。

+1

+1:而且......如果你使用的是Apache,它將爲你處理大量的緩衝和併發。事實上,使用mod_wsgi,您可以同時運行多個後端進程。在你進行基準測試之前,你不能確定,但​​它能夠處理的工作量通常很大。 – 2010-08-26 18:40:40

+0

好的。感謝您爲我節省了N小時的工作。我主要關心的是幾秒鐘_was_這麼長..我的個人目標之一是提供一個良好的用戶界面,我認爲用戶盯着一個空白屏幕幾秒鐘,而圖像生成,併發送,將是次要的。如果有一個隊列,我至少可以進行輪詢並讓他們佔用一條消息或一些東西來看待。 – 2010-08-26 18:54:41

+0

@random_person:「盯着一個空白的屏幕」? HTML頁面如何呈現「空白屏幕」?你是怎樣做的?大多數情況下,當我提交表格時,我盯着前一頁。然後頁面被突然更換了。另外,很多人都喜歡使用JavaScript來展示一些動作。但我不知道如何在瀏覽器中創建一個「黑屏」。你能解釋一下嗎? – 2010-08-26 20:12:16

0

我也有一個圖像生成網站(Names4Frames),並通過AJAX(和PHP)做了類似的事情。我沒有任何明顯的減速(或死亡的小狗),但該網站也不會產生大量的流量。我不是線程方面的專家,說實話,我不是100%確定你的確切關切是什麼以及你使用的是什麼技術......

基本上有一個頁面請求來自另一頁面的圖像也許甚至位於不同的服務器上),並且當完成時,第二頁返回到用於處理/顯示目的的關於圖像的第一任何相關信息。如果我們只談幾秒鐘,我就不會看到這是一個真正的問題,除非您正在處理大量訪問者不斷使用此映像創建服務。

0

經驗法則:如果任務可能堆積,則使用隊列。

對於你的情況,任務可能需要高達 2秒,假設一天8小時,你可以每天最多8 * 60 * 60/2 = 14400張圖片,而沒有併發。如果你每天獲得7200次以上的請求,你有50%的機會重疊其中任何一個。有更復雜的分析可以顯示您可能獲得的預期重疊程度;但似乎可以肯定地說,在超負荷之前,您每天可以處理超過一千張圖片。

現在這個問題似乎更容易了:你認爲每天很快你會得到超過一兩個圖像創作嗎?如果是,則設置一個隊列;如果沒有,請稍後再離開。

無論如何,保持良好的日誌;確保您可以分辨何時有任何處理重疊。請記住,一旦你同時處理了兩個任務,他們將花費更長的時間,增加第三個人在完成另外兩個任務之前到達的概率,第四個......當你到達一個無形的門檻時,性能將大幅下降。不要因此而失眠,只是在你注意之前不要讓它發生。