タスクキューの概要

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

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 を処理できます。

次のステップ

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

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

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