タスクキューの概要

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

タスクキュー サービスは、非同期処理用に設計されています。タスクの配信タイミングに関する確実な保証はないため、ユーザーが結果を待機する対話型のアプリケーションには適していません。

push キューと pull キュー

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

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

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

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

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

タスクキューのすべてのタスクは非同期的に実行されます。タスクを作成したアプリケーションは、タスクをキューに渡します。タスクが完了したかどうか、または成功したかどうかは元のアプリケーションには通知されません。

ワーカーがタスクの処理に失敗した場合、タスクキュー サービスはキューに再試行メカニズムを適用するため、タスクは限られた回数だけ再試行されます。

使用例

push キュー

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

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

pull キュー

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

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

次のステップ