push キューを作成する

このページでは、push キューの作成とカスタマイズ、キューのコンテンツの確認を行う方法について説明します。

キュー構成ファイルを使用してキューを作成する

タスクを処理するには、タスクを push キューに追加する必要があります。App Engine には、default という名前のデフォルトの push キューが用意されています。これは、デフォルト設定ですぐに使用できるように構成されています。すべてのタスクをこのデフォルト キューに追加するだけで、これを使用できます。他のキューを作成して構成する必要はありません。

キューを追加するか、デフォルトの構成を変更するには、アプリケーションのキュー構成ファイルを編集して App Engine にアップロードします。最大 100 個のキューを作成できます。キューを動的に作成することはできません。

次のキュー構成ファイルは、2 つのキューを定義しています。

queue:
- name: queue-blue
  target: v2.task-module
  rate: 5/s

- name: queue-red
  rate: 1/s

ファイルをアップロードするには:

gcloud app deploy queue.yaml

queue-blue に追加されたタスクはすべてターゲット モジュール v2.task-module に送信されます。queue-red の更新間隔は 5 回/秒から 1 回/秒に変更されます。1 秒間に 1 タスクの割合でタスクがキューからターゲットに送信されます。

キューを削除した後に同じ名前で新しいキューを作成する場合は、7 日間ほど待つ必要があります。

他にも多数のパラメータを構成ファイルに追加して、push キューの動作をカスタマイズできます。詳細については、キュー構成ファイルのリファレンスをご覧ください。

push キューの処理速度を定義する

ratebucket_sizemax_concurrent_requests などのディレクティブを定義すると、各キューでタスクが処理されるレートを制御できます。

タスクキューでは、トークン バケットを使用して、タスク実行の速度を制御します。名前付きのキューにはそれぞれ、bucket_size で指定した数のトークンを保持できるトークン バケットがあります。また、バケットサイズを指定していない場合、保持できるトークン数の最大個数は 5 個になります。

アプリケーションで 1 つのタスクが実行されるたびに、バケットからトークンが 1 つ削除されます。キューのバケットにトークンがなくなるまで、アプリはそのキューにあるタスクの処理を続けます。キューに指定した rate に基づき、App Engine からバケットに対して新しいトークンが継続的に補充されます。

処理対象のタスクがキューにあって、そのキューのバケットにトークンがある場合、App Engine はトークンと同じ数のタスクを同時に処理します。その結果、処理量の急増によってシステム リソースが消費され、ユーザー リクエストの処理とリソースの競合が発生する可能性があります。

大量のタスクの同時実行やデータストアの競合を防ぐには、max_concurrent_requests を使用します。

以下の例では、max_concurrent_requests を設定してタスクを制限しています。また、アプリケーションの要件と使用可能なリソースに基づいて、バケットサイズとレートを調整しています。

queue:
- name: queue-blue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

すべてのキューに保存容量の上限を設定する

キュー構成ファイルを使用して、すべてのキューでタスクデータに使用できる保存容量の合計を定義できます。保存容量の合計の上限を定義するには、最上位に total_storage_limit という名前の要素を追加します。

# Set the total storage limit for all queues to 120MB
total_storage_limit: 120M
queue:
- name: queue-blue
  rate: 35/s

この値には、数値に続けて単位を指定します。単位は、バイトの場合は B、キロバイトの場合は K、メガバイトの場合は M、ギガバイトの場合は G、テラバイトの場合は T を指定します。たとえば 100K は 100 キロバイトの上限を表します。タスクを追加するとキューが保存容量の上限を超える場合、タスクを追加する呼び出しは失敗します。無料アプリの場合、デフォルトの上限は 500M(500 メガバイト)です。有料アプリの場合、上限を明示しないと無制限となります。この制限を使用すると、Fork 爆弾となるプログラミング エラーからアプリを保護できます。このエラーがあると、各タスクが実行中に他の複数のタスクを追加できてしまいます。

タスクを追加するときに割り当ての不足が原因でエラーが発生する場合は、合計保存容量の上限を増やすと解決できることがあります。上限を増やす場合は、数日間相当のタスクに必要な容量に上限を設定することを強くおすすめします。これによって、キューが一時的にバックアップできるようになります。バックログを使用して処理している間に引き続き新しいタスクを受け付けることができる上に、Fork 爆弾のプログラミング エラーからも保護できます。

Google Cloud コンソールでのキューのモニタリング

  1. Google Cloud コンソールで、[Cloud Tasks] ページに移動します。

    Cloud Tasks に移動

    App Engine の [タスクキュー] ページに移動すると、[Cloud Tasks] ページへの移動手順が表示されます。この更新を Google Cloud コンソールで行っても、タスクキューの機能は変更されません。

  2. Cloud Tasks API を有効にします。

  3. [Cloud Tasks] ページに移動すると、アプリケーションのすべてのキューが一覧表示されます。キューの名前をクリックすると、[キューの詳細] ページが開き、選択したキュー内のタスクがすべて表示されます。

次のステップ

タスクの作成について確認する。