2012-02-14 137 views
1

我想建立一個服務,將按一定的時間間隔收集一些數據形式的網絡,然後解析這些數據,最後解析結果 - 執行專用程序。服務運行的典型模式:如何在遠程服務器上實現在php腳本執行管理器

  1. 申請項目清單進行更新,以列出的項目
  2. 下載數據
  3. 檢查什麼的還沒有更新
  4. 更新數據庫
  5. 包含更新
  6. 過濾數據(取只有最高優先級的更新)
  7. 執行一些過程來分析更新
  8. 過濾包含更新的數據(僅獲得中等優先級兩者均更新)
  9. 執行一些程序來解析... ... 如果潔具不被更新的這麼多數據 ...

一切都將是簡單的。 有太多的數據需要更新,以至於從1到8的每一步(可能除了1)腳本將由於限制60秒的最大執行時間而失敗。即使有增加的選擇,這也不是最佳的,因爲該項目的主要目標是首先提供最高優先級的數據。不幸的是,定義信息的優先級是基於獲取大部分數據並在已存儲數據和傳入(更新)數據之間進行大量比較。

我可以從服務速度中退出,至少獲得高優先級更新,並等待更長的時間。 我想過編寫一些父母腳本(經理)來控制服務的每一步(1-8),也許通過執行其他腳本? 經理應該能夠恢復未完成的步驟(腳本)以完成。有可能以這種方式編寫每一步,它將執行一小部分代碼,並在完成之後標記這一小部分工作,即在SQL DB中完成。在經理恢復後,由於超過max exec,步驟(腳本)將繼續形成由服務器終止的點。時間。

已知平臺的限制: 遠程服務器的,不可改變的最大執行時間,通常限制在解析的同時一個腳本,缺乏訪問許多Apache的功能,和所有其他限制典型的遠程服務器

要求: 除了調用特定的腳本之外,某些類型的管理器是強制性的,這個父進程必須寫一些關於激活的腳本的註釋。

經理可以通過crul調用,一分鐘間隔就足夠了。不幸的是,在這裏並不是一個選項,因爲每個服務步驟都需要打電話列表。

我還考慮爲服務的每一步獲取新的遠程主機,並由另一個遠程主機控制它們,可以調用它們並要求使用ie SOAP來完成工作,但是這種情況出現在我希望的解決方案列表的末尾因爲它沒有解決最大執行時間的問題,並且通過全球網絡帶來大量數據交換是處理數據的最慢的方式。

有關如何實施解決方案的任何想法?

回答

0

我不明白他們自己的步驟2和步驟3是如何執行超過60秒的。如果您在步驟2中使用curl_multi_exec,它將在幾秒鐘內運行。如果您在步驟3中將腳本超過60秒,您將獲得「超出內存限制」而不是更早。

所有這一切讓我得出一個結論,那就是劇本是未優化。而解決辦法是:

  1. 把任務分成(一)什麼更新和保存在數據庫中(比如說標誌1什麼更新,0什麼不可以); (b)遍歷需要更新並更新它們的行,將標誌設置爲0.在約50秒剛剛關閉(假設腳本每隔幾分鐘運行一次,這將起作用)。

  2. 獲得第二臺服務器,並設置適當的執行時間以運行腳本數小時。由於它可以訪問你的第一個數據庫(而不是通過http調用),它不會成爲主要的流量增長點。

相關問題