2011-08-30 73 views
7

我正在嘗試構建一個不平凡的GAE應用程序,而且我不確定一個cron作業,任務,後端或所有組合都是我需要使用的基礎根據GAE對HTTP請求的請求超時限制。應用程序的任務,Cron作業或後端

我需要做的不同的步驟是:

1)我有向上15000點,我需要從一個普通的時間表,沒有任何用戶交互中提取數據。站點的總數不會變爲靜態,但它們都保存在數據存儲區[Table0]中,並沿着它們的讀取間隔。間隔時間可以按照每天至每30天定期變化。

2)對於步驟#1中符合「拉」計劃標準的每個站點,我需要通過HTTP GET從它獲取數據(也可能是全部或少至2或3個站點) 。一旦我從站點獲得響應,解析結果並將這些數據保存到數據存儲中[Table1]。 3)對於[Table1]中最近放入數據存儲區的所有數據(它們將有一個特殊標誌),我需要向第三方站點發出額外的HTTP請求以進行一些額外的處理。只要我從這個網站收到數據,我將所有相關信息存儲到數據存儲中的另一個表[Table2]中。

4)只要數據可用並已經從步驟#3準備就緒,我需要將它全部取出並執行一些額外的轉換並更新數據存儲中的原始表[Table1]。

我不確定我需要使用哪些不同組件來確保我可以完成每項工作,而不會超出放置在GAE的Web請求上的響應截止日期。對於由cron作業和任務發起的請求,我相信你可以在10分鐘內完成它,而典型的用戶驅動請求允許30秒。

回答

3

GAE對於您的用例來說是一個艱難的平臺。但是,出於極端的受虐狂,我正在嘗試類似的東西。因此,這裏有我的兩分錢,根據我的經驗,到目前爲止:

  1. 後端 - 將它們用於任何長期運行,I/O密集型你可能有任務(網絡爬行是一個很好的例子,假設你可以推遲計算密集型處理)。
  2. Mapreduce API - 非常適合計算密集型/並行作業,如統計信息收集,索引等。直到最近,該庫只有一個映射器實現,但最近谷歌還發布了內存中的Shuffler,適合大約100MB。
  3. 任務隊列 - 當一切都失敗時:-)。
  4. 克朗 - 主要是爲了啓動定期任務 - 執行它們的上下文取決於你。

設計後端任務以便可以使用任務隊列在「前端」上下文中調度(手動或通過查詢當前配額使用情況)可能是個好主意,如果您有備用前端CPU週期。

+1

我希望這聽起來不太貶低GAE。儘管存在一些限制,我認爲這是一個很棒的平臺 - 這會迫使設計者更徹底地計劃資源消耗。 – tooringtest

0

我在後端出來之前放棄了GAE,所以無法評論。但是,我做了幾次是:

  • 的Cron計劃揭開序幕過程
  • 的Cron處理程序調用任務URL
  • 任務從數據存儲抓住第一項(URL),執行HTTP請求,操作上數據,將URL記錄更新爲已處理它並再次調用任務URL。

所以cron基本上是定期喚醒taskqueue和taskqueue遞歸運行,直到它達到某個停止點。

您可以在我的公共GAE應用程序中看到它 - https://github.com/mavenn/watchbots-gae-python

+1

您也可以做一些事情來幫助這項工作更多地同時發生,就像讓任務調用下一個任務並傳遞一個光標,以便它從最後一批之後的位置開始。 –

5

任務隊列是完成此操作的最佳方式,但您可能需要查看App Engine Pipeline API,該工具專門針對您正在討論的工作流程而設計。

相關問題