2013-03-18 17 views
1

我有一項服務,如backupify。哪些下載來自不同社交媒體平臺的數據,目前我有大約2500個活躍用戶,每個用戶運行一個腳本,從Facebook獲取數據並將它們存儲在Amazon S3上,我的服務器是AWS上的Ec2實例。Cron Jobs對於大量用戶的管理

我有表中的條目,如Facebook用戶的900條目,有一個PHP腳本,它運行並從數據庫表中獲取用戶,然後從Facebook備份數據,然後從Facebook中選擇下一個用戶。

一切都很好,當我有少於1000用戶,但現在我有超過2500用戶問題是PHP腳本暫停,或運行的前100名用戶,然後暫停,超時等我運行PHP腳本來自php -q myscript.php命令。

的另一個問題是,單一的用戶腳本需要大約65秒鐘,從數據庫表到達最後一個用戶可能需要幾天,因此最新最好的方式來吸引DATABSE表運行parrallel等

請建議我爲大量用戶備份大量數據的最佳方式是什麼,我應該能夠監控cron,像漫畫家一樣。

回答

2

如果我理解正確,您將爲所有用戶獲得一個單一的cron任務,以某種頻率運行,試圖在一次處理中處理每個用戶的數據。

  1. 您是否嘗試在代碼的開頭髮布set_time_limit(0);?另外,如果任務需要資源,你是否考慮爲每個N用戶創建一個單獨的cron任務(基本上模仿多線程行爲;從而利用服務器的多個CPU核心)?
  2. 是否正在將數據寫入某種cache而不是數據庫,並且有單獨的任務將緩存內容提交給可行的數據庫?
  3. 你有機會使用內存數據表(這很快)嗎?您需要將數據庫內容永久保存到磁盤,但是對於此價格,您可以快速訪問數據庫。
  4. 您可以將任務外包給分離的服務器作爲分佈式服務,並將cron腳本作爲它們的負載均衡器來編寫?
  5. 同樣優化您的代碼可能會有所幫助。例如(如果您還沒有這樣做),您可以緩存收集的數據,並在腳本末尾的單個事務中提交,以便執行流不會因DB重複性I/O阻塞而分散。