2011-10-13 88 views
0

我正在構建一個小應用程序,要求用戶通過電子郵件上傳圖片。它使用MySQL和S3構建在PHP(無框架)中。工作隊列 - cron會工作嗎?

到目前爲止,在我的方案中:電子郵件存儲在POP3帳戶。腳本每分鐘運行一次,獲取最舊的電子郵件,調整圖像大小,將其上傳到S3,將其路徑存儲在數據庫中,刪除電子郵件。

在更大範圍內,這將如何管理? cron工作是處理這種情況的最佳方式嗎?如果這個過程需要一分多鐘,它會重疊並最終失敗,對吧?或者如果花費不到一分鐘的時間呢?我會得到不必要的空閒時間,考慮到我會在一個更大的規模上每小時發出超過60個請求...

也許我應該使用.forward文件來處理電子郵件,但我再也不會控制流量。

我相信大多數這些方案的工作,我只是好奇最好的做法。

謝謝!

回答

3

稍微修改的方法可能是:

  • 從cron運行腳本每分鐘
  • 您的腳本檢查,如果它的另一個實例已在運行,如果是這種情況只存在
  • 正在運行的腳本處理剩餘的隊列,直到爲空或一些元素(例如max 10)

我曾經有一個備份過程備份了客戶目錄ev如果最後一次完成的備份時間超過一定時間,則爲小時。這很有效,直到某些客戶擁有太多的Gb數據並且腳本花費了一個多小時才能完成備份。

如果沒有檢查,下一小時腳本將再次運行同一個客戶,這也需要一個多小時,等等,直到機器變得沒有反應並且運行水平很高。

我已經實現的修復程序是描述的檢查,如果另一個實例正在運行,只需退出並等待下一個週期。在解決這個問題之後,我多年來從未遇到過問題。

1

嘗試有一個長期運行的過程。它檢查郵件,並處理所有郵件。如果它在完成時找不到任何郵件,則會進入睡眠狀態一分鐘。

如果您遇到穩定性問題,您可以隨時使用類似supervise之類的東西。