タスクキューの概要

このページでは、タスクキューの概要とその使い方について説明します。タスクキューを使用すると、アプリケーションは、「タスク」と呼ばれる作業をユーザー リクエストの外で非同期に実行できます。アプリがバックグラウンドで作業を実行する必要がある場合、タスクがタスクキューに追加されます。そのタスクはワーカー サービスによって後で実行されます。

push キューと pull キュー

タスクキューには push と pull の 2 種類があります。タスクキュー サービスがタスク リクエストをワーカー サービスにディスパッチする方法は、キューの種類ごとに異なります。

push キューは、確実な一定の頻度でリクエストをディスパッチします。このキューにより、タスクの実行が保証されます。タスクがキューから送信される頻度を制御できるため、ワーカーのスケーリング動作、つまりコストを制御できます。

タスクは、サービスに送信される App Engine リクエストとして実行されるため、タスクには厳格な期限が適用されます。自動スケーリング サービスで処理されるタスクは 10 分以内に終了する必要があります。基本および手動スケーリング サービスで処理されるタスクは、最大 24 時間実行できます。

pull キューはタスクをディスパッチしません。このキューは、他のワーカー サービスの必要に応じて自発的にキューからタスクを「リース」します。pull キューは強力で、タスクを処理するタイミングや場所を柔軟に選べますが、プロセス管理の負担が増えます。タスクがリースされると、リースワーカーによって期限が宣言されます。期限までに、ワーカーはそのタスクを完了して削除するか、またはタスクキュー サービスによって別のワーカーがそのタスクをリースできるようにする必要があります。

ヒント: pull キューの代わりに Google Cloud Pub/Sub が役に立つ場合があります。

タスクキューのすべてのタスクは非同期的に実行されます。タスクを作成したアプリケーションに、タスクが完了したかどうか、タスクが成功したかどうかは通知されません。タスクキュー サービスには再試行メカニズムがあり、タスクが失敗した場合、有限回だけ再試行できます。

使用例

push キュー

push キューの典型的な使用例は「スロー」処理です。ソーシャル ネットワークのメッセージング システムでは、ユーザーがメッセージを送信するたびに、送信者のフォロワーを更新する必要があります。この処理には相当の時間がかかる場合があります。アプリケーションは、非同期的にワーカーに送信される各メッセージのタスクをキューに追加できます。ワーカーはタスク リクエストを受信すると、送信者のフォロワーのリストを取得し、フォロワーごとにデータベースを更新できます。データベース更新のたびに別の push タスクをキューに追加すると、ワーカーの効率が向上します。

push キューの別の使用例は、スケジュールされたタスクです。広告キャンペーンを実装するアプリでは、メールを送信するために作成したタスクを、指定した時間になるまで保留する指示付きで push キューに追加できます。指定した時間になると、タスクキュー サービスがリスクエストの発行を開始し、タスクを実行します。

pull キュー

タスクを一括して効率的に実行する必要があるときは、pull キューが有効です。1 つの方法として、pull タスクにタグを付ける機能を活用できます。ワーカーは同じタグの付いている一連のタスクをリースできます。典型的な例として、多くのプレーヤーやグループが次々と参加する多数のゲームのリーダーボードを管理するアプリがあります。ハイスコアが更新されるたびに、スコアとプレーヤーを指定した pull タスクをキューに追加し、ゲーム ID をタスクタグとして使用できます。ワーカーは定期的に「復帰」して、ゲーム ID が同じ一連のタスクをリースし、リーダーボードを更新します。指定されたタグ値を使用してタスクを明示的にリースすることも、類似のタグが付いているどの一連のタスクを送信するかの判断をサービスに任せることもできます。

タグを使用した一括処理はとても強力です。アプリの実行中にタグを動的に生成できるため、ワーカーは簡単に新しいゲーム ID を処理できます。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境