2011-08-30 8 views
7

私は非自明のGAEアプリケーションを構築しようとしていますが、cronジョブ、タスク、バックエンド、またはすべての組み合わせがベースになる必要があるかどうかはわかりませんGAEがHTTP要求に対して持っている要求のタイムアウト限度に基づいています。アプリケーションのタスク、Cronジョブ、バックエンド

私が行う必要がある明確な手順は以下のとおりです。

1)私は上向きに、私は定期的なスケジュールで、あらゆるユーザーの操作なしからデータを取得する必要が15,000サイトの持っています。サイトの総数は静的ではありませんが、読み込まれる間隔の横にデータストア[Table0]にすべて保存されます。間隔は、毎日のように定期的に30日ごとに変わることがあります。

2)「プル」スケジュール基準に適合するステップ#1の各サイトでは、HTTP GETを介してデータを取得する必要があります(再度、すべてまたは2,3サイトのように) 。サイトから応答が返ったら、結果を解析し、このデータを[Table1]のようにデータストアに保存します。

3)[Table1]のデータストアに最近格納されたデータ(特別なフラグが付いている)の場合、追加の処理を行うためにサードパーティのサイトに追加のHTTPリクエストを発行する必要があります。このサイトからデータを受け取るとすぐに、関連するすべての情報をデータストアの別のテーブル[Table2]に保存します。

4)データが利用可能になり、ステップ3から準備が整うとすぐに、データストア内の元のテーブル[Table1]をすべて更新して更新する必要があります。

私は、GAEのウェブリクエストに記載された応答期限を超過することなく、それぞれの作業を完了できるようにするために、どのコンポーネントを使用する必要があるのか​​わかりません。 cronジョブとタスクによって開始されたリクエストについては、完了までに10分かかりますが、一般的なユーザー主導のリクエストは30秒間許可されます。

答えて

3

GAEは、あなたのユースケースにとって難しいプラットフォームです。しかし、極端なマゾヒズムから、私は似たような試みをしています。だからここにこれまでの私の経験に基づいて私の2セント、以下のとおりです。

  1. バックエンド - (ウェブクロールがあなたを想定し、良い例であるあなたが持つかもしれない長時間実行、I/O集中型のタスクのためにそれらを使用してください後で計算処理を遅らせることができます)。
  2. Mapreduce API - 統計収集、索引付けなどの計算集約型/並列ジョブに優れています。最近まで、このライブラリにはマッパー実装しかありませんでしたが、最近Googleはインメモリーシャッフラーをリリースしました。約100MBに収まる。
  3. タスクキュー - 他のすべてが失敗したときのために:-)。
  4. Cron - 主に定期的なタスクを開始する - あなたが実行するコンテキストは、あなた次第です。

あなたは予備のフロントエンドを持っている場合、彼らは、タスクキューを使用して、「フロントエンド」文脈で(手動、または多分あなたの現在のクォータの使用状況を照会することによって)スケジュールすることができるように、あなたのバックエンドタスクを設計することは良い考えかもしれませんCPUサイクル。

+1

私はGAEのあまりにも卑劣な音ではないと思います。その制約にもかかわらず、それは素晴らしいプラットフォームだと思う - デザイナーがリソース消費をより完全に計画するように強制する。 – tooringtest

0

バックエンドが出る前にGAEを放棄したので、そのことについてコメントすることはできません。しかし、私は何回かやったことだった。

  • プロセスをキックオフする予定のCron
  • のcronハンドラは、タスクは、データストアから最初の項目(URLを)つかむHTTPリクエストを実行し、上の動作
  • タスクのURLを呼び出しますURLレコードを更新し、タスクURLを再度呼び出します。

したがって、cronは基本的に定期的にタスクキューを起動しています。タスクキューは、いくつかの停止ポイントに達するまで再帰的に実行されます。

私の公式GAEアプリ - https://github.com/mavenn/watchbots-gae-pythonのアクション1で見ることができます。

+1

また、タスクが次のタスクを呼び出して、最後のバッチの直後の位置で開始するようにカーソルを渡すように、この作業をより同時に実行するのに役立ついくつかのことを行うこともできます。 –

5

タスクキューはこれを行う一般的な方法ですが、あなたが話しているワークフローの種類に合わせて設計されたApp Engine Pipeline APIを参照してください。