0

ユーザーがアプリのボタンをクリックしてから一定時間 (たとえば 1 日) に Facebook メッセージをユーザーに送信する Google App Engine アプリを作成したいと考えています。潜在的に何百万もの小さなジョブにcronタスク キューを使用するのはスケーラブルではありません。バックエンド スレッドを使用して独自のキューを実装することも検討しましたが、これは、私が知る限り 、バックエンドAPIを使用してのみ利用できます。バックエンド API は、より多くの用途向けに設計されており、無料ではありません。

無料の Google App Engine アプリで一定期間後に多数の小さなタスクを実行するスケーラブルな方法はありますか?

4

1 に答える 1

1

まず第一に、何百万もの小さなジョブを実行しようとしている場合、どう見ても無料の割り当てをすぐに使い果たしてしまいます。無料割り当てはテスト用です。

タスクの粒度によって異なります。1 日に 1 回多くのタスクを実行している場合、mapreduce 操作 (基本的にタスク キューで一連のタスクを送信する) に接続された cron は正常に動作します。基本的には、データストア クエリを発行して、実行する必要があるタスクを見つけ、それらを mapreduce に送信します。

このタスクを 1 日に数千回 (毎分) 実行すると、多くのクエリを発行するため、コストがかかり始める可能性があります。これらのクエリのほとんどが何も返さない場合でも、コストは最小限であることに注意してください。

もう 1 つのオプションは、タスクをデータストアではなくメモリに格納することです。これは、バックエンドの使用を開始する場所です。しかし、バックエンドは維持するのに費用がかかります。はるかに安価な VM を提供する Google Compute Engine の使用を検討してください。

編集:

cron/datastore ルートを使用する場合は、ユーザーが遅延メッセージを送信するたびに新しいエンティティを保存します。最も重要なことは、メッセージを送信する必要があるときのクエリ可能なタイムスタンプがあり、おそらく最も近い分または最も近い 5 分に丸められます。

次に、毎分など、設定された間隔で実行される cron ジョブを作成します。実行するたびに、指定された時間に送信する必要があるすべての cron ジョブのクエリが作成されます。

本当に毎分数十万のメッセージを送信する必要がある場合は、cron タスクから送信する必要はありません。cron タスクで、クエリを展開する mapreduce ジョブを生成し、メッセージを送信するタスクを生成する必要があります。

于 2013-06-25T23:36:16.000 に答える